]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] Re: better getattr caching..
authorTrond Myklebust <trond.myklebust@fys.uio.no>
Wed, 31 Jul 2002 07:28:49 +0000 (00:28 -0700)
committerTrond Myklebust <trond.myklebust@fys.uio.no>
Wed, 31 Jul 2002 07:28:49 +0000 (00:28 -0700)
The following patches to nfs2xdr.c/nfs3xdr.c might be relevant: *entry
points into the page, and so the assignment should be made before we
kunmap().

Also includes a patch that converts references to inode->i_data into
inode->i_mapping.  Not likely to be the source of your hang, but should
still be done for consistency with the rest of the kernel.

fs/nfs/dir.c
fs/nfs/nfs2xdr.c
fs/nfs/nfs3xdr.c

index 00090f459e7302294c30d5cc23f8b98dde2bdb03..fd76950d5d5df465658a66d90106696ac9ad4794 100644 (file)
@@ -198,7 +198,7 @@ int find_dirent_page(nfs_readdir_descriptor_t *desc)
 
        dfprintk(VFS, "NFS: find_dirent_page() searching directory page %ld\n", desc->page_index);
 
-       page = read_cache_page(&inode->i_data, desc->page_index,
+       page = read_cache_page(inode->i_mapping, desc->page_index,
                               (filler_t *)nfs_readdir_filler, desc);
        if (IS_ERR(page)) {
                status = PTR_ERR(page);
@@ -713,7 +713,7 @@ int nfs_cached_lookup(struct inode *dir, struct dentry *dentry,
        desc.page_index = 0;
        desc.plus = 1;
 
-       for(;(page = find_get_page(&dir->i_data, desc.page_index)); desc.page_index++) {
+       for(;(page = find_get_page(dir->i_mapping, desc.page_index)); desc.page_index++) {
 
                res = -EIO;
                if (PageUptodate(page)) {
index 5e083b6b3bcabb161555f7d2274e116c0bd27884..4883b923d5f18dd04751fd5d926a32cc16df811a 100644 (file)
@@ -420,9 +420,9 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy)
        kunmap(*page);
        return nr;
  short_pkt:
-       kunmap(*page);
        printk(KERN_NOTICE "NFS: short packet in readdir reply!\n");
        entry[0] = entry[1] = 0;
+       kunmap(*page);
        return nr;
 err_unmap:
        kunmap(*page);
index 784720607bf87732d960f090eab8a5e29ffc36e3..4ebce82ad8e04218a36c904764e49a5aa1c2affc 100644 (file)
@@ -574,10 +574,10 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res)
        kunmap(*page);
        return nr;
  short_pkt:
-       kunmap(*page);
        printk(KERN_NOTICE "NFS: short packet in readdir reply!\n");
        /* truncate listing */
        entry[0] = entry[1] = 0;
+       kunmap(*page);
        return nr;
 err_unmap:
        kunmap(*page);