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>
This commit is contained in:
parent
ba17674fe0
commit
50fd801067
1 changed files with 4 additions and 2 deletions
|
@ -162,15 +162,17 @@ v9fs_file_write(struct file *filp, const char __user * data,
|
||||||
|
|
||||||
fid = filp->private_data;
|
fid = filp->private_data;
|
||||||
ret = p9_client_uwrite(fid, data, *offset, count);
|
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;
|
*offset += ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (*offset > inode->i_size) {
|
if (*offset > inode->i_size) {
|
||||||
inode->i_size = *offset;
|
inode->i_size = *offset;
|
||||||
inode->i_blocks = (inode->i_size + 512 - 1) >> 9;
|
inode->i_blocks = (inode->i_size + 512 - 1) >> 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidate_inode_pages2(inode->i_mapping);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue