
From: Neil Brown <neilb@cse.unsw.edu.au>




 fs/nfsd/export.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN fs/nfsd/export.c~exp_parent-locking-fix fs/nfsd/export.c
--- 25/fs/nfsd/export.c~exp_parent-locking-fix	2003-04-02 22:51:29.000000000 -0800
+++ 25-akpm/fs/nfsd/export.c	2003-04-02 22:51:29.000000000 -0800
@@ -543,13 +543,13 @@ exp_parent(svc_client *clp, struct vfsmo
 	dget(dentry);
 	exp = exp_get_by_name(clp, mnt, dentry, reqp);
 
-	while (exp == NULL && dentry != dentry->d_parent) {
+	while (exp == NULL && !IS_ROOT(dentry)) {
 		struct dentry *parent;
 		read_lock(&dparent_lock);
 		parent = dget(dentry->d_parent);
+		read_unlock(&dparent_lock);
 		dput(dentry);
 		dentry = parent;
-		read_unlock(&dparent_lock);
 		exp = exp_get_by_name(clp, mnt, dentry, reqp);
 	}
 	dput(dentry);

_
