|
@@ -2404,6 +2404,7 @@ struct dentry *d_materialise_unique(struct dentry *dentry, struct inode *inode)
|
|
|
if (d_ancestor(alias, dentry)) {
|
|
|
/* Check for loops */
|
|
|
actual = ERR_PTR(-ELOOP);
|
|
|
+ spin_unlock(&inode->i_lock);
|
|
|
} else if (IS_ROOT(alias)) {
|
|
|
/* Is this an anonymous mountpoint that we
|
|
|
* could splice into our tree? */
|
|
@@ -2413,7 +2414,7 @@ struct dentry *d_materialise_unique(struct dentry *dentry, struct inode *inode)
|
|
|
goto found;
|
|
|
} else {
|
|
|
/* Nope, but we must(!) avoid directory
|
|
|
- * aliasing */
|
|
|
+ * aliasing. This drops inode->i_lock */
|
|
|
actual = __d_unalias(inode, dentry, alias);
|
|
|
}
|
|
|
write_sequnlock(&rename_lock);
|