diff options
author | Alexander Levin <alexander.levin@verizon.com> | 2017-04-10 18:46:51 +0000 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-10-11 09:30:08 -0700 |
commit | 56ae414e9d2718bcbfda9ba3797c39005e2f90fb (patch) | |
tree | 377636c4a2fa3a6a52e8a04fa88e828ffe5bccea | |
parent | a0db28909ecfcb9e581f567f688929ed38ef3f56 (diff) | |
download | linux-exynos-56ae414e9d2718bcbfda9ba3797c39005e2f90fb.tar.gz linux-exynos-56ae414e9d2718bcbfda9ba3797c39005e2f90fb.tar.bz2 linux-exynos-56ae414e9d2718bcbfda9ba3797c39005e2f90fb.zip |
9p: set page uptodate when required in write_end()
Commit 77469c3f570 prevented setting the page as uptodate when we wrote
the right amount of data, fix that.
Fixes: 77469c3f570 ("9p: saner ->write_end() on failing copy into non-uptodate page")
Reviewed-by: Jan Kara <jack@suse.com>
Signed-off-by: Alexander Levin <alexander.levin@verizon.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/9p/vfs_addr.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c index adaf6f6dd858..e1cbdfdb7c68 100644 --- a/fs/9p/vfs_addr.c +++ b/fs/9p/vfs_addr.c @@ -310,9 +310,13 @@ static int v9fs_write_end(struct file *filp, struct address_space *mapping, p9_debug(P9_DEBUG_VFS, "filp %p, mapping %p\n", filp, mapping); - if (unlikely(copied < len && !PageUptodate(page))) { - copied = 0; - goto out; + if (!PageUptodate(page)) { + if (unlikely(copied < len)) { + copied = 0; + goto out; + } else if (len == PAGE_SIZE) { + SetPageUptodate(page); + } } /* * No need to use i_size_read() here, the i_size |