summary refs log tree commit diff
path: root/fs/exportfs
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2010-10-13 11:56:37 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2010-10-25 21:26:13 -0400
commit0461ee2616252f1f6cec628990fa913a4282dcf7 (patch)
tree05169e74aeccac9f2d35caeacc9dfa12e25b13c8 /fs/exportfs
parent3825bdb7ed920845961f32f364454bee5f469abb (diff)
downloadlinux-0461ee2616252f1f6cec628990fa913a4282dcf7.tar.gz
exportfs: use dget_parent
Use dget_parent instead of opencoding it.  This simplifies the code, but
more importanly prepares for the more complicated locking for a parent
dget in the dcache scale patch series.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/exportfs')
-rw-r--r--fs/exportfs/expfs.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c
index e9e175949a63..51b304056f10 100644
--- a/fs/exportfs/expfs.c
+++ b/fs/exportfs/expfs.c
@@ -74,21 +74,20 @@ static struct dentry *
 find_disconnected_root(struct dentry *dentry)
 {
 	dget(dentry);
-	spin_lock(&dentry->d_lock);
-	while (!IS_ROOT(dentry) &&
-	       (dentry->d_parent->d_flags & DCACHE_DISCONNECTED)) {
-		struct dentry *parent = dentry->d_parent;
-		dget(parent);
-		spin_unlock(&dentry->d_lock);
+	while (!IS_ROOT(dentry)) {
+		struct dentry *parent = dget_parent(dentry);
+
+		if (!(parent->d_flags & DCACHE_DISCONNECTED)) {
+			dput(parent);
+			break;
+		}
+
 		dput(dentry);
 		dentry = parent;
-		spin_lock(&dentry->d_lock);
 	}
-	spin_unlock(&dentry->d_lock);
 	return dentry;
 }
 
-
 /*
  * Make sure target_dir is fully connected to the dentry tree.
  *