summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-02-07 07:25:06 +0100
committerMike Marshall <hubcap@omnibond.com>2016-02-12 21:05:32 +0100
commit7b9761af86b63baf4ce304fbdfdb87227d4bfbed (patch)
tree8ed9e84726aa7a21c525c02bb1c398d20b89c395
parentorangefs: avoid freeing a slot twice in wait_for_direct_io() (diff)
downloadlinux-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>
-rw-r--r--fs/orangefs/file.c3
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__);