diff options
author | Benjamin Coddington <bcodding@redhat.com> | 2016-07-18 17:41:57 +0300 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2016-11-20 04:01:28 +0300 |
commit | 88d2d3999cf2fd0f5d2b4d520f322a084a4858d4 (patch) | |
tree | fcbc373a31759a1e4df529e9997abae7a8b1ceef /fs/nfs/write.c | |
parent | 9e1e3beb2c0980d88188dd1b87b066aae6952e97 (diff) | |
download | linux-88d2d3999cf2fd0f5d2b4d520f322a084a4858d4.tar.xz |
nfs: don't create zero-length requests
commit 149a4fddd0a72d526abbeac0c8deaab03559836a upstream.
NFS doesn't expect requests with wb_bytes set to zero and may make
unexpected decisions about how to handle that request at the page IO layer.
Skip request creation if we won't have any wb_bytes in the request.
Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Reviewed-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r-- | fs/nfs/write.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 301391a0bffc..fccc545d1292 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -747,6 +747,9 @@ int nfs_updatepage(struct file *file, struct page *page, file->f_path.dentry->d_name.name, count, (long long)(page_offset(page) + offset)); + if (!count) + goto out; + /* If we're not using byte range locks, and we know the page * is up to date, it may be more efficient to extend the write * to cover the entire page in order to avoid fragmentation @@ -764,7 +767,7 @@ int nfs_updatepage(struct file *file, struct page *page, nfs_set_pageerror(page); else __set_page_dirty_nobuffers(page); - +out: dprintk("NFS: nfs_updatepage returns %d (isize %lld)\n", status, (long long)i_size_read(inode)); return status; |