Skip to content

Commit

Permalink
9p: cache meta-data when cache=loose
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Eric Van Hensbergen committed Jul 14, 2007
1 parent 1d6b560 commit 9523a84
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
14 changes: 12 additions & 2 deletions fs/9p/vfs_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}

Expand Down
3 changes: 3 additions & 0 deletions fs/9p/vfs_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 9523a84

Please sign in to comment.