diff options
author | peter <peter@FreeBSD.org> | 2001-10-19 23:32:03 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2001-10-19 23:32:03 +0000 |
commit | f36c042920ca6b5312b59dcfe76dc7237b96d767 (patch) | |
tree | 217b1137d89adf203a8d8908c3344dede6524623 | |
parent | b83678939d020372ddd43b08bdfd1e1bf67e6e02 (diff) | |
download | FreeBSD-src-f36c042920ca6b5312b59dcfe76dc7237b96d767.zip FreeBSD-src-f36c042920ca6b5312b59dcfe76dc7237b96d767.tar.gz |
Add a sysctl for preventing the sync() in panic() recovery. This can
be so dangerous it isn't funny. eg: if you panic inside NFS or softdep,
and then try and sync you run into held locks and cause either deadlocks,
recursive panics or other interesting chaos. Default is unchanged.
-rw-r--r-- | sys/kern/kern_shutdown.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c index d493599..4686134 100644 --- a/sys/kern/kern_shutdown.c +++ b/sys/kern/kern_shutdown.c @@ -91,6 +91,10 @@ SYSCTL_INT(_debug, OID_AUTO, debugger_on_panic, CTLFLAG_RW, &debugger_on_panic, 0, "Run debugger on kernel panic"); #endif +int sync_on_panic = 1; +SYSCTL_INT(_kern, OID_AUTO, sync_on_panic, CTLFLAG_RW, + &sync_on_panic, 0, "Do a sync before rebooting from a panic"); + SYSCTL_NODE(_kern, OID_AUTO, shutdown, CTLFLAG_RW, 0, "Shutdown environment"); #ifdef HW_WDOG @@ -625,6 +629,8 @@ panic(const char *fmt, ...) } #endif #endif + if (!sync_on_panic) + bootopt |= RB_NOSYNC; boot(bootopt); } |