mnt: Factor out unhash_mnt from detach_mnt and umount_tree
Create a function unhash_mnt that contains the common code between detach_mnt and umount_tree, and use unhash_mnt in place of the common code. This add a unncessary list_del_init(mnt->mnt_child) into umount_tree but given that mnt_child is already empty this extra line is a noop. Cc: stable@vger.kernel.org Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>hifive-unleashed-5.1
parent
cd4a40174b
commit
7bdb11de8e
|
@ -798,10 +798,8 @@ static void __touch_mnt_namespace(struct mnt_namespace *ns)
|
||||||
/*
|
/*
|
||||||
* vfsmount lock must be held for write
|
* vfsmount lock must be held for write
|
||||||
*/
|
*/
|
||||||
static void detach_mnt(struct mount *mnt, struct path *old_path)
|
static void unhash_mnt(struct mount *mnt)
|
||||||
{
|
{
|
||||||
old_path->dentry = mnt->mnt_mountpoint;
|
|
||||||
old_path->mnt = &mnt->mnt_parent->mnt;
|
|
||||||
mnt->mnt_parent = mnt;
|
mnt->mnt_parent = mnt;
|
||||||
mnt->mnt_mountpoint = mnt->mnt.mnt_root;
|
mnt->mnt_mountpoint = mnt->mnt.mnt_root;
|
||||||
list_del_init(&mnt->mnt_child);
|
list_del_init(&mnt->mnt_child);
|
||||||
|
@ -811,6 +809,16 @@ static void detach_mnt(struct mount *mnt, struct path *old_path)
|
||||||
mnt->mnt_mp = NULL;
|
mnt->mnt_mp = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vfsmount lock must be held for write
|
||||||
|
*/
|
||||||
|
static void detach_mnt(struct mount *mnt, struct path *old_path)
|
||||||
|
{
|
||||||
|
old_path->dentry = mnt->mnt_mountpoint;
|
||||||
|
old_path->mnt = &mnt->mnt_parent->mnt;
|
||||||
|
unhash_mnt(mnt);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* vfsmount lock must be held for write
|
* vfsmount lock must be held for write
|
||||||
*/
|
*/
|
||||||
|
@ -1362,15 +1370,10 @@ static void umount_tree(struct mount *mnt, enum umount_tree_flags how)
|
||||||
|
|
||||||
pin_insert_group(&p->mnt_umount, &p->mnt_parent->mnt, &unmounted);
|
pin_insert_group(&p->mnt_umount, &p->mnt_parent->mnt, &unmounted);
|
||||||
if (mnt_has_parent(p)) {
|
if (mnt_has_parent(p)) {
|
||||||
hlist_del_init(&p->mnt_mp_list);
|
|
||||||
put_mountpoint(p->mnt_mp);
|
|
||||||
mnt_add_count(p->mnt_parent, -1);
|
mnt_add_count(p->mnt_parent, -1);
|
||||||
/* old mountpoint will be dropped when we can do that */
|
/* old mountpoint will be dropped when we can do that */
|
||||||
p->mnt_ex_mountpoint = p->mnt_mountpoint;
|
p->mnt_ex_mountpoint = p->mnt_mountpoint;
|
||||||
p->mnt_mountpoint = p->mnt.mnt_root;
|
unhash_mnt(p);
|
||||||
p->mnt_parent = p;
|
|
||||||
p->mnt_mp = NULL;
|
|
||||||
hlist_del_init_rcu(&p->mnt_hash);
|
|
||||||
}
|
}
|
||||||
change_mnt_propagation(p, MS_PRIVATE);
|
change_mnt_propagation(p, MS_PRIVATE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue