From: Jan Janssen Date: Wed, 18 May 2022 06:12:31 +0000 (+0200) Subject: shutdown: Lazy unmount /oldroot/{dev,proc,sys} X-Git-Tag: v252-rc1~840^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F23348%2Fhead;p=thirdparty%2Fsystemd.git shutdown: Lazy unmount /oldroot/{dev,proc,sys} These should not prevent us from cleaning up the remainders of /oldroot if something in the kernel is blocking these from being unmounted. --- diff --git a/src/shutdown/umount.c b/src/shutdown/umount.c index 243a1f80efa..1e691379a45 100644 --- a/src/shutdown/umount.c +++ b/src/shutdown/umount.c @@ -648,6 +648,17 @@ static int umount_with_timeout(MountPoint *m, bool last_try) { if (r == -EBUSY && last_try) log_umount_blockers(m->path); + + /* If API filesystems under /oldroot cannot be unmounted we can still lazily unmount + * them to unblock /oldroot. They serve no function to us anymore and should be + * memory-only and hence safe to unmount like this. */ + if (in_initrd() && + PATH_STARTSWITH_SET(m->path, "/oldroot/dev", "/oldroot/proc", "/oldroot/sys")) { + log_info("Lazily unmounting '%s' instead.", m->path); + r = umount2(m->path, MNT_FORCE | MNT_DETACH); + if (r < 0) + log_error_errno(errno, "Failed to lazily unmount %s: %m", m->path); + } } _exit(r < 0 ? EXIT_FAILURE : EXIT_SUCCESS);