Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9523a841b109765f8779236d28be6458ee3a6824
Commit:     9523a841b109765f8779236d28be6458ee3a6824
Parent:     1d6b5602381524c339af2c2fdfe42ad0a01464a4
Author:     Eric Van Hensbergen <[EMAIL PROTECTED]>
AuthorDate: Fri Jul 13 13:01:27 2007 -0500
Committer:  Eric Van Hensbergen <[EMAIL PROTECTED]>
CommitDate: Sat Jul 14 15:14:08 2007 -0500

    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 <[EMAIL PROTECTED]>
---
 fs/9p/vfs_file.c  |   14 ++++++++++++--
 fs/9p/vfs_inode.c |    3 +++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
index c1f7c02..2a40c29 100644
--- a/fs/9p/vfs_file.c
+++ b/fs/9p/vfs_file.c
@@ -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;
 }
 
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index c602c0e..e5c45ee 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -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);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to