[NFS] [PATCH] Corrects error patch in nfs_instantiate()

Steve Dickson (SteveD@redhat.com)
Fri, 04 Apr 2003 12:01:45 -0500


This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.

--=_courier-28128-1049477150-0001-2
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

In the 2.4.20 kernel, nfs_instantiate() is only calling d_drop() when
the lookup fails. The dentry also need to be removed from the
dirent cache when we can't get an inode.... Also, as Trond
pointed out, ENOMEM should be returned (instead of EACCES)
when we run out of inodes...

SteveD.

--=_courier-28128-1049477150-0001-2
Content-Type: text/plain; name="linux-2.4.20-nfs-d_drop.patch"; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="linux-2.4.20-nfs-d_drop.patch"

--- linux-2.4.20/fs/nfs/dir.c.orig 2003-04-04 06:55:20.000000000 -0500
+++ linux-2.4.20/fs/nfs/dir.c 2003-04-04 08:40:53.000000000 -0500
@@ -756,7 +756,7 @@ static int nfs_instantiate(struct dentry
struct nfs_fattr *fattr)
{
struct inode *inode;
- int error = -EACCES;
+ int error = 0;

if (fhandle->size == 0 || !(fattr->valid & NFS_ATTR_FATTR)) {
struct inode *dir = dentry->d_parent->d_inode;
@@ -768,9 +768,12 @@ static int nfs_instantiate(struct dentry
if (inode) {
d_instantiate(dentry, inode);
nfs_renew_times(dentry);
- error = 0;
+ } else {
+ error = -ENOMEM;
+ goto out_err;
}
return error;
+
out_err:
d_drop(dentry);
return error;

--=_courier-28128-1049477150-0001-2--