]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shutdown: Make all mounts private 25168/head
authorValentin David <valentin.david@canonical.com>
Mon, 9 Jan 2023 19:21:16 +0000 (20:21 +0100)
committerValentin David <valentin.david@canonical.com>
Wed, 11 Jan 2023 14:30:44 +0000 (15:30 +0100)
When systemd-shutdown is run, shared propagation is not needed anymore.  Making
mounts private allow to move mount points. This is needed to untangle cyclic
mounts.

src/shutdown/shutdown.c

index d0120bb85d7ad38f1b206eb6f4abb1c450b107e6..42111d27728892762baee4365de031988a004bc7 100644 (file)
@@ -400,6 +400,11 @@ int main(int argc, char *argv[]) {
         /* Lock us into memory */
         (void) mlockall(MCL_CURRENT|MCL_FUTURE);
 
+        /* We need to make mounts private so that we can MS_MOVE in unmount_all(). Kernel does not allow
+         * MS_MOVE when parent mountpoints have shared propagation. */
+        if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0)
+                log_warning_errno(errno, "Failed to make mounts private, ignoring: %m");
+
         /* Synchronize everything that is not written to disk yet at this point already. This is a good idea so that
          * slow IO is processed here already and the final process killing spree is not impacted by processes
          * desperately trying to sync IO to disk within their timeout. Do not remove this sync, data corruption will