| From 6a46c5735c29175da55b2fa9d53775182422cdd7 Mon Sep 17 00:00:00 2001 |
| From: "Eric W. Biederman" <ebiederm@xmission.com> |
| Date: Thu, 15 Jan 2015 22:58:33 -0600 |
| Subject: mnt: Factor umount_mnt from umount_tree |
| |
| From: "Eric W. Biederman" <ebiederm@xmission.com> |
| |
| commit 6a46c5735c29175da55b2fa9d53775182422cdd7 upstream. |
| |
| For future use factor out a function umount_mnt from umount_tree. |
| This function unhashes a mount and remembers where the mount |
| was mounted so that eventually when the code makes it to a |
| sleeping context the mountpoint can be dput. |
| |
| Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/namespace.c | 14 +++++++++++--- |
| 1 file changed, 11 insertions(+), 3 deletions(-) |
| |
| --- a/fs/namespace.c |
| +++ b/fs/namespace.c |
| @@ -822,6 +822,16 @@ static void detach_mnt(struct mount *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 |
| + */ |
| void mnt_set_mountpoint(struct mount *mnt, |
| struct mountpoint *mp, |
| struct mount *child_mnt) |
| @@ -1373,9 +1383,7 @@ static void umount_tree(struct mount *mn |
| 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); |
| } |