From 2cc0cd4371b9a3717380c858fc7e1b39cc632d08 Mon Sep 17 00:00:00 2001 From: Valentin David Date: Mon, 9 Jan 2023 20:21:16 +0100 Subject: shutdown: Make all mounts private 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 | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/shutdown') diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c index d0120bb85d..42111d2772 100644 --- a/src/shutdown/shutdown.c +++ b/src/shutdown/shutdown.c @@ -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 -- cgit v1.2.1