From: Harald Hoyer Date: Wed, 16 May 2012 12:22:43 +0000 (+0200) Subject: core/main.c: do_switch_root(): do not remove the old root if not in initrd X-Git-Tag: v183~66 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e148ac5a6cccd1c9c23bf7b3085b50fdb1cd1cf9;p=systemd core/main.c: do_switch_root(): do not remove the old root if not in initrd Only recursively remove the old root, if we have been in an initrd/initramfs. --- diff --git a/src/core/main.c b/src/core/main.c index 74712146..d7143eda 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1180,6 +1180,7 @@ static int do_switch_root(const char *switch_root) { int i; int cfd = -1; struct stat switch_root_stat, sb; + bool remove_old_root; if (path_equal(switch_root, "/")) return 0; @@ -1190,6 +1191,8 @@ static int do_switch_root(const char *switch_root) { goto fail; } + remove_old_root = in_initrd(); + for (i = 0; umounts[i] != NULL; i++) { char newmount[PATH_MAX]; @@ -1215,7 +1218,8 @@ static int do_switch_root(const char *switch_root) { goto fail; } - cfd = open("/", O_RDONLY); + if (remove_old_root) + cfd = open("/", O_RDONLY); if (mount(switch_root, "/", NULL, MS_MOVE, NULL) < 0) { r = -errno;