4.0-stable review patch.  If anyone has any objections, please let me know.

------------------

From: "Eric W. Biederman" <[email protected]>

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" <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 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);
        }


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to