Skip to contentSkip to conversation

Corrects error patch in nfs_instantiate()

PATCH New Steve Dickson 1 participant 1 message Apr 4, 2003 NFS client

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Corrects error patch in nfs_instantiate()

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.

fs/nfs/dir.c renamed from fs/nfs/dir.c.orig +5 -2
@@ -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;