X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmount-setup.c;h=1a82a46fefeac92cabe1642ee4f405b0624ea01a;hb=bfba3256a02a0871579c4ee48d787dfe4585fd8d;hp=07794df049adb65da3c8fe6e8c7add99973ac408;hpb=c9bc07646100855ff8193e1e62c52b77327e264d;p=elogind.git diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index 07794df04..1a82a46fe 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -190,8 +190,7 @@ int mount_cgroup_controllers(char ***join_controllers) { controllers = set_new(string_hash_func, string_compare_func); if (!controllers) { - r = -ENOMEM; - log_error("Failed to allocate controller set."); + r = log_oom(); goto finish; } @@ -262,9 +261,8 @@ int mount_cgroup_controllers(char ***join_controllers) { options = strv_join(*k, ","); if (!options) { - log_error("Failed to join options"); free(controller); - r = -ENOMEM; + r = log_oom(); goto finish; } @@ -275,9 +273,8 @@ int mount_cgroup_controllers(char ***join_controllers) { where = strappend("/sys/fs/cgroup/", options); if (!where) { - log_error("Failed to build path"); free(options); - r = -ENOMEM; + r = log_oom(); goto finish; } @@ -306,8 +303,7 @@ int mount_cgroup_controllers(char ***join_controllers) { t = strappend("/sys/fs/cgroup/", *i); if (!t) { - log_error("Failed to build path"); - r = -ENOMEM; + r = log_oom(); free(options); goto finish; } @@ -402,7 +398,16 @@ int mount_setup(bool loaded_policy) { /* Create a few default symlinks, which are normally created * by udevd, but some scripts might need them before we start * udevd. */ - dev_setup(); + dev_setup(NULL); + + /* Mark the root directory as shared in regards to mount + * propagation. The kernel defaults to "private", but we think + * it makes more sense to have a default of "shared" so that + * nspawn and the container tools work out of the box. If + * specific setups need other settings they can reset the + * propagation mode to private if needed. */ + if (mount(NULL, "/", NULL, MS_REC|MS_SHARED, NULL) < 0) + log_warning("Failed to set up the root directory for shared mount propagation: %m"); /* Create a few directories we always want around */ mkdir_label("/run/systemd", 0755);