aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChuck Silvers <chs@FreeBSD.org>2023-08-10 16:55:47 +0000
committerChuck Silvers <chs@FreeBSD.org>2023-08-10 16:59:06 +0000
commit60a41168d195cc09f7351c2c2bcafc389ed52406 (patch)
tree4eec41edc2f02f8c4b2ce58ce4841a2ec7ac2b2c
parentaa7957345732816fb0ba8308798d2f79f45597f9 (diff)
downloadsrc-60a41168d195cc09f7351c2c2bcafc389ed52406.tar.gz
src-60a41168d195cc09f7351c2c2bcafc389ed52406.zip
UFS: panic rather than forcibly unmount the root fs
If the root fs is forcibly unmounted then basically every process will die with a SEGV as soon as it tries to run again because libc.so is gone, which leaves the system basically hung. It seems better to just panic instead, so let's do that. Requested-by: karels Reviewed-by: imp, mckusick, karels Sponsored-by: Netflix Differential Revision: https://reviews.freebsd.org/D41387
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 64236d4e98d9..b2cd2d30bc04 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -303,6 +303,9 @@ ffs_fsfail_cleanup_locked(struct ufsmount *ump, int error)
mtx_assert(UFS_MTX(ump), MA_OWNED);
if (error == ENXIO && (ump->um_flags & UM_FSFAIL_CLEANUP) == 0) {
ump->um_flags |= UM_FSFAIL_CLEANUP;
+ if (ump->um_mountp == rootvnode->v_mount)
+ panic("UFS: root fs would be forcibly unmounted");
+
/*
* Queue an async forced unmount.
*/