diff options
author | smh <smh@FreeBSD.org> | 2016-01-06 09:56:06 +0000 |
---|---|---|
committer | smh <smh@FreeBSD.org> | 2016-01-06 09:56:06 +0000 |
commit | c8d8dd1a4db073793cb96e0bf4c9ea87157b0e88 (patch) | |
tree | bbb1c52a0000543ac35999d6210e65cbf2d24c8f /sbin/reboot | |
parent | 7e2e60f9853dcfee41c71c1aaca3a4e171b35bea (diff) | |
download | FreeBSD-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.8 | 19 | ||||
-rw-r--r-- | sbin/reboot/reboot.c | 12 |
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); |