mnt: Clarify and correct the disconnect logic in umount_tree
authorEric W. Biederman <ebiederm@xmission.com>
Fri, 17 Jul 2015 19:15:30 +0000 (14:15 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Thu, 23 Jul 2015 01:33:27 +0000 (20:33 -0500)
commitf2d0a123bcf16d1a9cf7942ddc98e0ef77862c2b
tree9ac56ed30a08d7243a2d9bea54d85dcc488aceba
parentd770e558e21961ad6cfdf0ff7df0eb5d7d4f0754
mnt: Clarify and correct the disconnect logic in umount_tree

rmdir mntpoint will result in an infinite loop when there is
a mount locked on the mountpoint in another mount namespace.

This is because the logic to test to see if a mount should
be disconnected in umount_tree is buggy.

Move the logic to decide if a mount should remain connected to
it's mountpoint into it's own function disconnect_mount so that
clarity of expression instead of terseness of expression becomes
a virtue.

When the conditions where it is invalid to leave a mount connected
are first ruled out, the logic for deciding if a mount should
be disconnected becomes much clearer and simpler.

Fixes: e0c9c0afd2fc958ffa34b697972721d81df8a56f mnt: Update detach_mounts to leave mounts connected
Fixes: ce07d891a0891d3c0d0c2d73d577490486b809e1 mnt: Honor MNT_LOCKED when detaching mounts
Cc: stable@vger.kernel.org
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/namespace.c
fs/pnode.h