From 7b9761af86b63baf4ce304fbdfdb87227d4bfbed Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 7 Feb 2016 01:25:06 -0500 Subject: orangefs: wait_for_direct_io(): restore the position in iter when restarting Signed-off-by: Al Viro Signed-off-by: Mike Marshall --- fs/orangefs/file.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'fs') diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c index 40b3805..c767ec7 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__); -- cgit v1.1