|
@@ -819,6 +819,16 @@ static void detach_mnt(struct mount *mnt, struct path *old_path)
|
|
|
unhash_mnt(mnt);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * vfsmount lock must be held for write
|
|
|
+ */
|
|
|
+static void umount_mnt(struct mount *mnt)
|
|
|
+{
|
|
|
+ /* old mountpoint will be dropped when we can do that */
|
|
|
+ mnt->mnt_ex_mountpoint = mnt->mnt_mountpoint;
|
|
|
+ unhash_mnt(mnt);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* vfsmount lock must be held for write
|
|
|
*/
|
|
@@ -1371,9 +1381,7 @@ static void umount_tree(struct mount *mnt, enum umount_tree_flags how)
|
|
|
pin_insert_group(&p->mnt_umount, &p->mnt_parent->mnt, &unmounted);
|
|
|
if (mnt_has_parent(p)) {
|
|
|
mnt_add_count(p->mnt_parent, -1);
|
|
|
- /* old mountpoint will be dropped when we can do that */
|
|
|
- p->mnt_ex_mountpoint = p->mnt_mountpoint;
|
|
|
- unhash_mnt(p);
|
|
|
+ umount_mnt(p);
|
|
|
}
|
|
|
change_mnt_propagation(p, MS_PRIVATE);
|
|
|
}
|