forked from Minki/linux
9p: cache meta-data when cache=loose
This patch expands the impact of the loose cache mode to allow for cached metadata increasing the performance of directory listings and other metadata read operations. Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
parent
1d6b560238
commit
9523a841b1
@ -67,10 +67,14 @@ int v9fs_file_open(struct inode *inode, struct file *file)
|
||||
return PTR_ERR(fid);
|
||||
|
||||
err = p9_client_open(fid, omode);
|
||||
if (err < 0) {
|
||||
if (err < 0) {
|
||||
p9_client_clunk(fid);
|
||||
return err;
|
||||
}
|
||||
if (omode & P9_OTRUNC) {
|
||||
inode->i_size = 0;
|
||||
inode->i_blocks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
file->private_data = fid;
|
||||
@ -151,6 +155,7 @@ v9fs_file_write(struct file *filp, const char __user * data,
|
||||
{
|
||||
int ret;
|
||||
struct p9_fid *fid;
|
||||
struct inode *inode = filp->f_path.dentry->d_inode;
|
||||
|
||||
P9_DPRINTK(P9_DEBUG_VFS, "data %p count %d offset %x\n", data,
|
||||
(int)count, (int)*offset);
|
||||
@ -160,7 +165,12 @@ v9fs_file_write(struct file *filp, const char __user * data,
|
||||
if (ret > 0)
|
||||
*offset += ret;
|
||||
|
||||
invalidate_inode_pages2(filp->f_path.dentry->d_inode->i_mapping);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -716,6 +716,9 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
P9_DPRINTK(P9_DEBUG_VFS, "dentry: %p\n", dentry);
|
||||
err = -EPERM;
|
||||
v9ses = v9fs_inode2v9ses(dentry->d_inode);
|
||||
if (v9ses->cache == CACHE_LOOSE)
|
||||
return simple_getattr(mnt, dentry, stat);
|
||||
|
||||
fid = v9fs_fid_lookup(dentry);
|
||||
if (IS_ERR(fid))
|
||||
return PTR_ERR(fid);
|
||||
|
Loading…
Reference in New Issue
Block a user