[PATCH 4/6] 2.4.19-rc1 nfs revalidate_inode() stack reductionpatches

From: Badari Pulavarty
Date: Mon Jan 10 2005 - 13:22:42 EST



Signed-off-by: Badari Pulavarty <pbadari@xxxxxxxxxx>
--- linux-2.4.29-rc1.org/fs/nfs/inode.c 2004-04-14 06:05:40.000000000 -0700
+++ linux-2.4.29-rc1/fs/nfs/inode.c 2005-01-09 23:14:48.000000000 -0800
@@ -881,11 +881,15 @@ int
__nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
{
int status = -ESTALE;
- struct nfs_fattr fattr;
+ struct nfs_fattr *fattr;

dfprintk(PAGECACHE, "NFS: revalidating (%x/%Ld)\n",
inode->i_dev, (long long)NFS_FILEID(inode));

+ fattr = kmalloc(sizeof(struct nfs_fattr), GFP_KERNEL);
+ if (!fattr)
+ return -ENOMEM;
+
lock_kernel();
if (!inode || is_bad_inode(inode))
goto out_nowait;
@@ -903,7 +907,7 @@ __nfs_revalidate_inode(struct nfs_server
}
NFS_FLAGS(inode) |= NFS_INO_REVALIDATING;

- status = NFS_PROTO(inode)->getattr(inode, &fattr);
+ status = NFS_PROTO(inode)->getattr(inode, fattr);
if (status) {
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%x/%Ld) getattr failed, error=%d\n",
inode->i_dev, (long long)NFS_FILEID(inode), status);
@@ -915,7 +919,7 @@ __nfs_revalidate_inode(struct nfs_server
goto out;
}

- status = nfs_refresh_inode(inode, &fattr);
+ status = nfs_refresh_inode(inode, fattr);
if (status) {
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%x/%Ld) refresh failed, error=%d\n",
inode->i_dev, (long long)NFS_FILEID(inode), status);
@@ -930,6 +934,7 @@ out:
wake_up(&inode->i_wait);
out_nowait:
unlock_kernel();
+ kfree(fattr);
return status;
}