From: Harald Hoyer Date: Mon, 14 Nov 2011 13:11:01 +0000 (+0100) Subject: switch_root: umount mount points we cannot move with MNT_DETACH X-Git-Tag: v2.21-rc1~187 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=944de78b5d83e548f7c428ef5c08c69e6984cc4f;p=thirdparty%2Futil-linux.git switch_root: umount mount points we cannot move with MNT_DETACH If a mount point cannot be moved to the new root, umount it with MNT_DETACH, so that it is lazy umounted and does not show up in /proc/mounts anymore. [kzak@redhat.com: - add MNT_DETACH macro fallback] Signed-off-by: Harald Hoyer Signed-off-by: Karel Zak --- diff --git a/sys-utils/switch_root.c b/sys-utils/switch_root.c index e50f3101a5..1c7375dbed 100644 --- a/sys-utils/switch_root.c +++ b/sys-utils/switch_root.c @@ -40,6 +40,10 @@ #define MS_MOVE 8192 #endif +#ifndef MNT_DETACH +#define MNT_DETACH 0x00000002 /* Just detach from the tree */ +#endif + /* remove all files/directories below dirName -- don't cross mountpoints */ static int recursiveRemove(int fd) { @@ -131,7 +135,7 @@ static int switchroot(const char *newroot) if ((stat(newmount, &sb) != 0) || (sb.st_dev != newroot_stat.st_dev)) { /* mount point seems to be mounted already or stat failed */ - umount(umounts[i]); + umount2(umounts[i], MNT_DETACH); continue; }