summaryrefslogtreecommitdiffstats
path: root/sbin/reboot
diff options
context:
space:
mode:
authorsmh <smh@FreeBSD.org>2016-01-06 09:56:06 +0000
committersmh <smh@FreeBSD.org>2016-01-06 09:56:06 +0000
commitc8d8dd1a4db073793cb96e0bf4c9ea87157b0e88 (patch)
treebbb1c52a0000543ac35999d6210e65cbf2d24c8f /sbin/reboot
parent7e2e60f9853dcfee41c71c1aaca3a4e171b35bea (diff)
downloadFreeBSD-src-c8d8dd1a4db073793cb96e0bf4c9ea87157b0e88.zip
FreeBSD-src-c8d8dd1a4db073793cb96e0bf4c9ea87157b0e88.tar.gz
MFC: r292266 & r292947
Add flag to disable inital reboot(8) userland sync Sponsored by: Multiplay
Diffstat (limited to 'sbin/reboot')
-rw-r--r--sbin/reboot/reboot.819
-rw-r--r--sbin/reboot/reboot.c12
2 files changed, 24 insertions, 7 deletions
diff --git a/sbin/reboot/reboot.8 b/sbin/reboot/reboot.8
index 13d7098..84dd887 100644
--- a/sbin/reboot/reboot.8
+++ b/sbin/reboot/reboot.8
@@ -29,6 +29,7 @@
.\" $FreeBSD$
.\"
.Dd October 11, 2010
+.Dd Jan 06, 2016
.Dt REBOOT 8
.Os
.Sh NAME
@@ -39,16 +40,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 dlnpq
+.Op Fl dlNnpq
.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 +95,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 d927db0..6d590ac 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;
@@ -76,8 +76,8 @@ main(int argc, char *argv[])
howto = RB_HALT;
} else
howto = 0;
- lflag = nflag = qflag = 0;
- while ((ch = getopt(argc, argv, "dk:lnpq")) != -1)
+ lflag = nflag = qflag = Nflag = 0;
+ while ((ch = getopt(argc, argv, "dk:lNnpq")) != -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;
@@ -107,6 +111,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 (geteuid()) {
errno = EPERM;
err(1, NULL);
OpenPOWER on IntegriCloud