summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorsmh <smh@FreeBSD.org>2015-12-15 14:17:07 +0000
committersmh <smh@FreeBSD.org>2015-12-15 14:17:07 +0000
commit43c2ba56ac39d9361a4e4e448ca1a34aba7044ca (patch)
tree150c5dbcae553d5ca08f564bf63af36085cfaa34 /sbin
parentd195f06a0409a3e16af20c7b073af74abf9ae81a (diff)
downloadFreeBSD-src-43c2ba56ac39d9361a4e4e448ca1a34aba7044ca.zip
FreeBSD-src-43c2ba56ac39d9361a4e4e448ca1a34aba7044ca.tar.gz
Add flag to disable inital reboot(8) userland sync
Add -N flag to reboot(8) which bypasses the userland sync(2) during reboot(8) while still allow the kernel sync during the reboot(2) syscall to occur. An example use of this is when rebooting with disconnected iSCSI sessions which would otherwise cause the reboot to hang on BIOs that will never complete. Reviewed by: bjk MFC after: 2 weeks Sponsored by: Multiplay Differential Revision: https://reviews.freebsd.org/D4449
Diffstat (limited to 'sbin')
-rw-r--r--sbin/reboot/reboot.820
-rw-r--r--sbin/reboot/reboot.c10
2 files changed, 23 insertions, 7 deletions
diff --git a/sbin/reboot/reboot.8 b/sbin/reboot/reboot.8
index ac3bd47..c95333c 100644
--- a/sbin/reboot/reboot.8
+++ b/sbin/reboot/reboot.8
@@ -28,7 +28,7 @@
.\" @(#)reboot.8 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
-.Dd May 22, 2015
+.Dd Dec 12, 2015
.Dt REBOOT 8
.Os
.Sh NAME
@@ -39,16 +39,16 @@
.Nd stopping and restarting the system
.Sh SYNOPSIS
.Nm halt
-.Op Fl lnpq
+.Op Fl lNnpq
.Op Fl k Ar kernel
.Nm
-.Op Fl dlnpqr
+.Op Fl dlNnpqr
.Op Fl k Ar kernel
.Nm fasthalt
-.Op Fl lnpq
+.Op Fl lNnpq
.Op Fl k Ar kernel
.Nm fastboot
-.Op Fl dlnpq
+.Op Fl dlNnpq
.Op Fl k Ar kernel
.Sh DESCRIPTION
The
@@ -94,6 +94,16 @@ that call
or
.Nm halt
and log this themselves.
+.It Fl N
+The file system cache is not flushed during the initial process clean-up,
+however the kernel level
+.Xr reboot 2
+is still processed with a sync.
+This option can be useful for performing a
+.Dq best-effort
+reboot when devices might be unavailable.
+This can happen when devices have been disconnected, such as with
+.Xr iscsi 4 .
.It Fl n
The file system cache is not flushed.
This option should probably not be used.
diff --git a/sbin/reboot/reboot.c b/sbin/reboot/reboot.c
index fdef7d5..eaaa5b5 100644
--- a/sbin/reboot/reboot.c
+++ b/sbin/reboot/reboot.c
@@ -67,7 +67,7 @@ main(int argc, char *argv[])
{
struct utmpx utx;
const struct passwd *pw;
- int ch, howto, i, fd, lflag, nflag, qflag, sverrno;
+ int ch, howto, i, fd, lflag, nflag, qflag, sverrno, Nflag;
u_int pageins;
const char *user, *kernel = NULL;
@@ -77,7 +77,7 @@ main(int argc, char *argv[])
} else
howto = 0;
lflag = nflag = qflag = 0;
- while ((ch = getopt(argc, argv, "dk:lnpqr")) != -1)
+ while ((ch = getopt(argc, argv, "dk:lNnpqr")) != -1)
switch(ch) {
case 'd':
howto |= RB_DUMP;
@@ -92,6 +92,10 @@ main(int argc, char *argv[])
nflag = 1;
howto |= RB_NOSYNC;
break;
+ case 'N':
+ nflag = 1;
+ Nflag = 1;
+ break;
case 'p':
howto |= RB_POWEROFF;
break;
@@ -110,6 +114,8 @@ main(int argc, char *argv[])
if ((howto & (RB_DUMP | RB_HALT)) == (RB_DUMP | RB_HALT))
errx(1, "cannot dump (-d) when halting; must reboot instead");
+ if (Nflag && (howto & RB_NOSYNC) != 0)
+ errx(1, "-N cannot be used with -n");
if ((howto & RB_REROOT) != 0 && howto != RB_REROOT)
errx(1, "-r cannot be used with -d, -n, or -p");
if (geteuid()) {
OpenPOWER on IntegriCloud