From 70a44d38603e6a32c9de6f9e90d010a744b4bb6a Mon Sep 17 00:00:00 2001 From: Anees Rehman Date: Fri, 25 Sep 2026 20:42:35 +0200 Subject: [PATCH] mount: report unmount failures Return a failure status from unmount_regular() when filesystems remain mounted, and use it to report the final shutdown unmount result. Signed-off-by: Anees Rehman --- src/mount.c | 8 ++++++-- src/sig.c | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mount.c b/src/mount.c index 8bc742a3..bd1515e8 100644 --- a/src/mount.c +++ b/src/mount.c @@ -121,15 +121,19 @@ void unmount_tmpfs(void) } } -void unmount_regular(void) +int unmount_regular(void) { const struct mntent *mnt; FILE *fp = NULL; + int rc = 0; while ((mnt = iterator("/proc/mounts", &fp))) { - if (!unmount(mnt->mnt_dir)) + rc = unmount(mnt->mnt_dir); + if (!rc) iterator_end(&fp); /* Restart iteration */ } + + return !!rc; } /** diff --git a/src/sig.c b/src/sig.c index ae48311c..b3af975d 100644 --- a/src/sig.c +++ b/src/sig.c @@ -170,7 +170,7 @@ static struct sigmap { void mdadm_wait(void); void unmount_tmpfs(void); -void unmount_regular(void); +int unmount_regular(void); static void fs_swapoff(void) { @@ -302,6 +302,7 @@ void do_shutdown(shutop_t op) struct sched_param sched_param = { .sched_priority = 99 }; int in_cont = in_container(); int signo = SIGTERM; + int rc; if (SHUTDOWN_DEBUG) cprintf("do_shutdown: entered, op=%d\n", op); @@ -372,12 +373,13 @@ void do_shutdown(shutop_t op) } /* Unmount any tmpfs before unmounting swap ... */ - print(0, "Unmounting filesystems ..."); + print(-1, "Unmounting filesystems ..."); unmount_tmpfs(); fs_swapoff(); /* ... unmount remaining regular file systems. */ - unmount_regular(); + rc = unmount_regular(); + print(rc, NULL); /* * We sit on / so we must remount it ro, try all the things!