diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-09-03 18:05:31 +0200 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-09-03 18:10:36 +0200 |
commit | c49edecd513693ea7530ab18efbd7d6d5b7cbf90 (patch) | |
tree | d1474d884131047d3c6ea8244d0f6c7d78f136d5 /fs/nfs/file.c | |
parent | sunrpc: fix UDP memory accounting (diff) | |
download | linux-c49edecd513693ea7530ab18efbd7d6d5b7cbf90.tar.xz linux-c49edecd513693ea7530ab18efbd7d6d5b7cbf90.zip |
NFS: Fix error reporting in nfs_file_write()
When doing O_DSYNC writes, the actual write errors are reported through
generic_write_sync(), so we must test the result.
Reported-by: J. R. Okajima <hooanon05g@gmail.com>
Fixes: 18290650b1c8 ("NFS: Move buffered I/O locking into nfs_file_write()")
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to '')
-rw-r--r-- | fs/nfs/file.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 7d620970f2e1..ca699ddc11c1 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -657,7 +657,10 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) if (result <= 0) goto out; - written = generic_write_sync(iocb, result); + result = generic_write_sync(iocb, result); + if (result < 0) + goto out; + written = result; iocb->ki_pos += written; /* Return error values */ |