|
@@ -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.
|
|
|
*
|