summaryrefslogtreecommitdiffstats
path: root/fs
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
parent3825bdb7ed920845961f32f364454bee5f469abb (diff)
downloadlinux-stable-0461ee2616252f1f6cec628990fa913a4282dcf7.tar.gz
linux-stable-0461ee2616252f1f6cec628990fa913a4282dcf7.tar.bz2
linux-stable-0461ee2616252f1f6cec628990fa913a4282dcf7.zip
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')
-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.
*