summaryrefslogtreecommitdiffstats
path: root/fs/orangefs/file.c
diff options
context:
space:
mode:
authorMike Marshall <hubcap@omnibond.com>2015-11-13 19:05:11 +0100
committerMike Marshall <hubcap@omnibond.com>2015-11-13 19:05:11 +0100
commit3f1b6947dcfa76de0b690022dcf3ed8814744aa7 (patch)
treed0c0e42b79ae1b166e5f20be0b27483d7c0d4662 /fs/orangefs/file.c
parentorangefs: validate the response in decode_dirents() (diff)
downloadlinux-3f1b6947dcfa76de0b690022dcf3ed8814744aa7.tar.xz
linux-3f1b6947dcfa76de0b690022dcf3ed8814744aa7.zip
Orangefs: set pos after generic_write_checks
if we are appending, generic_write_checks would have updated pos to the end of the file... Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Diffstat (limited to 'fs/orangefs/file.c')
-rw-r--r--fs/orangefs/file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c
index 78d296bb870e..78a46968a994 100644
--- a/fs/orangefs/file.c
+++ b/fs/orangefs/file.c
@@ -430,7 +430,7 @@ static ssize_t pvfs2_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
static ssize_t pvfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *iter)
{
struct file *file = iocb->ki_filp;
- loff_t pos = *(&iocb->ki_pos);
+ loff_t pos;
ssize_t rc;
BUG_ON(iocb->private);
@@ -461,6 +461,13 @@ static ssize_t pvfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *iter)
goto out;
}
+ /*
+ * if we are appending, generic_write_checks would have updated
+ * pos to the end of the file, so we will wait till now to set
+ * pos...
+ */
+ pos = *(&iocb->ki_pos);
+
rc = do_readv_writev(PVFS_IO_WRITE,
file,
&pos,