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.
This commit is contained in:
Harald Hoyer
2012-05-21 18:50:29 +02:00
committed by Lennart Poettering
parent d03bc1b814
commit e148ac5a6c
+5 -1
View File
@@ -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;