summaryrefslogtreecommitdiffstats
path: root/fs/9p/vfs_file.c
diff options
context:
space:
mode:
authorEric Van Hensbergen <ericvh@ericvh-desktop.austin.ibm.com>2007-10-17 21:31:07 +0200
committerEric Van Hensbergen <ericvh@ericvh-desktop.austin.ibm.com>2007-10-17 21:31:07 +0200
commit50fd8010673b770f6489c9ee96680c204aefa84a (patch)
tree734686c1c5be427d72665f2ea63537886717f157 /fs/9p/vfs_file.c
parent9p: attach-per-user (diff)
downloadlinux-50fd8010673b770f6489c9ee96680c204aefa84a.tar.xz
linux-50fd8010673b770f6489c9ee96680c204aefa84a.zip
9p: soften invalidation in loose_mode
Loose mode in 9p utilizes the page cache without respecting coherency with the server. Any writes previously invaldiated the entire mapping for a file. This patch softens the behavior to only invalidate the region of the actual write. Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Diffstat (limited to 'fs/9p/vfs_file.c')
-rw-r--r--fs/9p/vfs_file.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
index 716691689fd5..ba4b1caa9c43 100644
--- a/fs/9p/vfs_file.c
+++ b/fs/9p/vfs_file.c
@@ -162,15 +162,17 @@ v9fs_file_write(struct file *filp, const char __user * data,
fid = filp->private_data;
ret = p9_client_uwrite(fid, data, *offset, count);
- if (ret > 0)
+ if (ret > 0) {
+ invalidate_inode_pages2_range(inode->i_mapping, *offset,
+ *offset+ret);
*offset += ret;
+ }
if (*offset > inode->i_size) {
inode->i_size = *offset;
inode->i_blocks = (inode->i_size + 512 - 1) >> 9;
}
- invalidate_inode_pages2(inode->i_mapping);
return ret;
}