diff options
author | Miklos Szeredi | 2021-10-22 17:03:02 +0200 |
---|---|---|
committer | Miklos Szeredi | 2021-10-28 09:45:32 +0200 |
commit | 8c56e03d2e08d83776c89e4b6563ca8cfdf7da54 (patch) | |
tree | db341870dd4f5f76c5b9858a77694b4b685f8c66 | |
parent | fa5eee57e33e79b71b40e6950c29cc46f5cc5cb7 (diff) |
fuse: don't bump attr_version in cached write
The attribute version in fuse_inode should be updated whenever the
attributes might have changed on the server. In case of cached writes this
is not the case, so updating the attr_version is unnecessary and could
possibly affect performance.
Open code the remaining part of fuse_write_update_size().
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
-rw-r--r-- | fs/fuse/file.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 06967d8e2742..c09ab835821a 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -2309,15 +2309,18 @@ static int fuse_write_end(struct file *file, struct address_space *mapping, if (!copied) goto unlock; + pos += copied; if (!PageUptodate(page)) { /* Zero any unwritten bytes at the end of the page */ - size_t endoff = (pos + copied) & ~PAGE_MASK; + size_t endoff = pos & ~PAGE_MASK; if (endoff) zero_user_segment(page, endoff, PAGE_SIZE); SetPageUptodate(page); } - fuse_write_update_size(inode, pos + copied); + if (pos > inode->i_size) + i_size_write(inode, pos); + set_page_dirty(page); unlock: |