summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortblume <Thomas.Blume@suse.com>2016-05-19 16:35:27 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-05-19 10:35:27 -0400
commitf3f054f03e6de7865132e9602da178dfc82102ab (patch)
treeb81e3b8e5922f97899d34b2d5dca694355b97ba4
parentcfd75d5e79fcedab0239ec97a6762fe08c5cda2b (diff)
systemctl: restore the no-sync option for legacy halt (#3249)
The sync() call on shutdown had been removed with commit 57371e5829a61e5ee6c9f98404dfc729d6c62608 together with the no-sync option for the shutdown commands. The sync call was restored in commit 4a3ad39957399c4a30fc472a804e72907ecaa4f9 but the no-sync option wasn't re-added. I think we should restore this option at least for the legacy halt command.
-rw-r--r--man/halt.xml8
-rw-r--r--src/systemctl/systemctl.c10
2 files changed, 16 insertions, 2 deletions
diff --git a/man/halt.xml b/man/halt.xml
index a06dbd0097..e3fa60a915 100644
--- a/man/halt.xml
+++ b/man/halt.xml
@@ -133,6 +133,14 @@
</varlistentry>
<varlistentry>
+ <term><option>-n</option></term>
+ <term><option>--no-sync</option></term>
+
+ <listitem><para>Don't sync hard disks/storage media before
+ halt, power-off, reboot.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>--no-wall</option></term>
<listitem><para>Do not send wall message before halt,
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 0faf37d320..3b4678c119 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -102,6 +102,7 @@ static bool arg_no_block = false;
static bool arg_no_legend = false;
static bool arg_no_pager = false;
static bool arg_no_wtmp = false;
+static bool arg_no_sync = false;
static bool arg_no_wall = false;
static bool arg_no_reload = false;
static bool arg_value = false;
@@ -6926,6 +6927,7 @@ static int halt_parse_argv(int argc, char *argv[]) {
{ "force", no_argument, NULL, 'f' },
{ "wtmp-only", no_argument, NULL, 'w' },
{ "no-wtmp", no_argument, NULL, 'd' },
+ { "no-sync", no_argument, NULL, 'n' },
{ "no-wall", no_argument, NULL, ARG_NO_WALL },
{}
};
@@ -6971,13 +6973,16 @@ static int halt_parse_argv(int argc, char *argv[]) {
arg_no_wtmp = true;
break;
+ case 'n':
+ arg_no_sync = true;
+ break;
+
case ARG_NO_WALL:
arg_no_wall = true;
break;
case 'i':
case 'h':
- case 'n':
/* Compatibility nops */
break;
@@ -7496,7 +7501,8 @@ static int halt_now(enum action a) {
/* The kernel will automaticall flush ATA disks and suchlike
* on reboot(), but the file systems need to be synce'd
* explicitly in advance. */
- (void) sync();
+ if (!arg_no_sync)
+ (void) sync();
/* Make sure C-A-D is handled by the kernel from this point
* on... */