[PATCH 3/6] 2.4.19-rc1 nfs_lookup stack reduction patch

From: Badari Pulavarty
Date: Mon Jan 10 2005 - 13:31:04 EST



Signed-off-by: Badari Pulavarty <pbadari@xxxxxxxxxx>
--- linux-2.4.29-rc1.org/fs/nfs/dir.c 2005-01-07 07:39:06.000000000 -0800
+++ linux-2.4.29-rc1/fs/nfs/dir.c 2005-01-10 00:15:56.000000000 -0800
@@ -580,8 +580,8 @@ static struct dentry *nfs_lookup(struct
{
struct inode *inode;
int error;
- struct nfs_fh fhandle;
- struct nfs_fattr fattr;
+ struct nfs_fh *fhandle;
+ struct nfs_fattr *fattr;

dfprintk(VFS, "NFS: lookup(%s/%s)\n",
dentry->d_parent->d_name.name, dentry->d_name.name);
@@ -591,15 +591,22 @@ static struct dentry *nfs_lookup(struct
goto out;

error = -ENOMEM;
+ fhandle = kmalloc(sizeof(struct nfs_fh), GFP_KERNEL);
+ if (!fhandle)
+ goto out;
+ fattr = kmalloc(sizeof(struct nfs_fattr), GFP_KERNEL);
+ if (!fattr)
+ goto free_fhandle;
+
dentry->d_op = &nfs_dentry_operations;

- error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr);
+ error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr);
inode = NULL;
if (error == -ENOENT)
goto no_entry;
if (!error) {
error = -EACCES;
- inode = nfs_fhget(dentry, &fhandle, &fattr);
+ inode = nfs_fhget(dentry, fhandle, fattr);
if (inode) {
no_entry:
d_add(dentry, inode);
@@ -607,6 +614,9 @@ static struct dentry *nfs_lookup(struct
}
nfs_renew_times(dentry);
}
+ kfree(fattr);
+free_fhandle:
+ kfree(fhandle);
out:
return ERR_PTR(error);
}