get rid of propagate_umount() mistakenly treating slaves as busy.
commit 88b368f27a094277143d8ecd5a056116f6a41520 upstream.
The check in __propagate_umount() ("has somebody explicitly mounted
something on that slave?") is done *before* taking the already doomed
victims out of the child lists.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
[lizf: Backported to 3.4:
- adjust context
- s/hlist_for_each_entry/list_for_each_entry/]
Signed-off-by: Zefan Li <lizefan@huawei.com>
diff --git a/fs/pnode.c b/fs/pnode.c
index ab5fa9e..f61dcb4 100644
--- a/fs/pnode.c
+++ b/fs/pnode.c
@@ -333,8 +333,10 @@
* umount the child only if the child has no
* other children
*/
- if (child && list_empty(&child->mnt_mounts))
+ if (child && list_empty(&child->mnt_mounts)) {
+ list_del_init(&child->mnt_child);
list_move_tail(&child->mnt_hash, &mnt->mnt_hash);
+ }
}
}