diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-02-07 07:25:06 +0100 |
---|---|---|
committer | Mike Marshall <hubcap@omnibond.com> | 2016-02-12 21:05:32 +0100 |
commit | 7b9761af86b63baf4ce304fbdfdb87227d4bfbed (patch) | |
tree | 8ed9e84726aa7a21c525c02bb1c398d20b89c395 /fs/orangefs/file.c | |
parent | orangefs: avoid freeing a slot twice in wait_for_direct_io() (diff) | |
download | linux-7b9761af86b63baf4ce304fbdfdb87227d4bfbed.tar.xz linux-7b9761af86b63baf4ce304fbdfdb87227d4bfbed.zip |
orangefs: wait_for_direct_io(): restore the position in iter when restarting
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Diffstat (limited to 'fs/orangefs/file.c')
-rw-r--r-- | fs/orangefs/file.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c index 40b38057b826..c767ec746c76 100644 --- a/fs/orangefs/file.c +++ b/fs/orangefs/file.c @@ -133,6 +133,7 @@ static ssize_t wait_for_direct_io(enum ORANGEFS_io_type type, struct inode *inod struct orangefs_khandle *handle = &orangefs_inode->refn.khandle; struct orangefs_bufmap *bufmap = NULL; struct orangefs_kernel_op_s *new_op = NULL; + struct iov_iter saved = *iter; int buffer_index = -1; ssize_t ret; @@ -211,6 +212,8 @@ populate_shared_memory: if (ret == -EAGAIN && op_state_purged(new_op)) { orangefs_bufmap_put(bufmap, buffer_index); buffer_index = -1; + if (type == ORANGEFS_IO_WRITE) + *iter = saved; gossip_debug(GOSSIP_FILE_DEBUG, "%s:going to repopulate_shared_memory.\n", __func__); |