[systemd-devel] [PATCH] core/main.c: do_switch_root(): do not remove the old root if not in initrd
harald at redhat.com
harald at redhat.com
Wed May 16 05:22:43 PDT 2012
From: Harald Hoyer <harald at redhat.com>
Only recursively remove the old root, if we have been in an
initrd/initramfs.
---
src/core/main.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/core/main.c b/src/core/main.c
index 1fd11d5..9084463 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;
--
1.7.10.1
More information about the systemd-devel
mailing list