]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mnt: Factor umount_mnt from umount_tree
authorEric W. Biederman <ebiederm@xmission.com>
Fri, 16 Jan 2015 04:58:33 +0000 (22:58 -0600)
committerEric W. Biederman <ebiederm@xmission.com>
Thu, 9 Apr 2015 16:39:54 +0000 (11:39 -0500)
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.

Cc: stable@vger.kernel.org
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/namespace.c

index e669a3bf86e76e4d0c906b5303e6a139101adc4f..010d5bebcb7e33e0f92cd12f7d7747538d1e7cd9 100644 (file)
@@ -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);
        }