X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fswitch-root.c;fp=src%2Fcore%2Fswitch-root.c;h=efc7d345e1a83ca28a861b69eda9b0ee92cac281;hp=9832a520e4ac3f29d6ecfce0e85d181d826fcb3a;hb=f47fc35555565c4b161c2e44b357b4dbaf3a997d;hpb=dbf61afb29e016fe1b4ac48312a782df1d60a3e6 diff --git a/src/core/switch-root.c b/src/core/switch-root.c index 9832a520e..efc7d345e 100644 --- a/src/core/switch-root.c +++ b/src/core/switch-root.c @@ -56,6 +56,15 @@ int switch_root(const char *new_root) { goto fail; } + /* Work-around for a kernel bug: for some reason the kernel + * refuses switching root if any file systems are mounted + * MS_SHARED. Hence remount them MS_PRIVATE here as a + * work-around. + * + * https://bugzilla.redhat.com/show_bug.cgi?id=847418 */ + if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0) + log_warning("Failed to make \"/\" private mount: %m"); + NULSTR_FOREACH(i, move_mounts) { char new_mount[PATH_MAX]; struct stat sb;