chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
80f7378
)
systemctl: shutdown(8) - call kexec if kexec kernel is loaded
author
Kay Sievers
<kay.sievers@vrfy.org>
Sun, 20 Feb 2011 20:09:07 +0000
(21:09 +0100)
committer
Kay Sievers
<kay.sievers@vrfy.org>
Sun, 20 Feb 2011 20:09:07 +0000
(21:09 +0100)
src/systemctl.c
patch
|
blob
|
history
diff --git
a/src/systemctl.c
b/src/systemctl.c
index 4a8b9a196f3c286de07892268f896a034adf2ed4..eacc63e94dd2c45c98f2e96b5ea5d2c506968fe7 100644
(file)
--- a/
src/systemctl.c
+++ b/
src/systemctl.c
@@
-4668,6
+4668,18
@@
static int parse_time_spec(const char *t, usec_t *_u) {
return 0;
}
return 0;
}
+static bool kexec_loaded(void) {
+ bool loaded = false;
+ char *s;
+
+ if (read_one_line_file("/sys/kernel/kexec_loaded", &s) >= 0) {
+ if (s[0] == '1')
+ loaded = true;
+ free(s);
+ }
+ return loaded;
+}
+
static int shutdown_parse_argv(int argc, char *argv[]) {
enum {
static int shutdown_parse_argv(int argc, char *argv[]) {
enum {
@@
-4705,7
+4717,10
@@
static int shutdown_parse_argv(int argc, char *argv[]) {
break;
case 'r':
break;
case 'r':
- arg_action = ACTION_REBOOT;
+ if (kexec_loaded())
+ arg_action = ACTION_KEXEC;
+ else
+ arg_action = ACTION_REBOOT;
break;
case 'h':
break;
case 'h':
@@
-4898,7
+4913,10
@@
static int parse_argv(int argc, char *argv[]) {
arg_action = ACTION_POWEROFF;
return halt_parse_argv(argc, argv);
} else if (strstr(program_invocation_short_name, "reboot")) {
arg_action = ACTION_POWEROFF;
return halt_parse_argv(argc, argv);
} else if (strstr(program_invocation_short_name, "reboot")) {
- arg_action = ACTION_REBOOT;
+ if (kexec_loaded())
+ arg_action = ACTION_KEXEC;
+ else
+ arg_action = ACTION_REBOOT;
return halt_parse_argv(argc, argv);
} else if (strstr(program_invocation_short_name, "shutdown")) {
arg_action = ACTION_POWEROFF;
return halt_parse_argv(argc, argv);
} else if (strstr(program_invocation_short_name, "shutdown")) {
arg_action = ACTION_POWEROFF;
@@
-5498,6
+5516,7
@@
int main(int argc, char*argv[]) {
case ACTION_HALT:
case ACTION_POWEROFF:
case ACTION_REBOOT:
case ACTION_HALT:
case ACTION_POWEROFF:
case ACTION_REBOOT:
+ case ACTION_KEXEC:
r = halt_main(bus);
break;
r = halt_main(bus);
break;