summaryrefslogtreecommitdiff
path: root/kexec/kexec.c
diff options
context:
space:
mode:
authorManeesh Soni <maneesh@in.ibm.com>2006-07-27 11:30:15 -0600
committerEric W. Biederman <ebiederm@xmission.com>2006-07-27 11:30:15 -0600
commit61909815c74fa778c2787aa824dc2c5826d9769b (patch)
tree10469e7c4783429ade58a2f9093f7bff7290d467 /kexec/kexec.c
parent9241000f28eb6b86a06c0be2d6cf31498373bc1c (diff)
ifdown check
Signed-off-by: Maneesh Soni <maneesh@in.ibm.com>
Diffstat (limited to 'kexec/kexec.c')
-rw-r--r--kexec/kexec.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/kexec/kexec.c b/kexec/kexec.c
index 3994107..aa597a7 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -699,6 +699,19 @@ void usage(void)
printf("\n");
}
+int sys_kexec_loaded()
+{
+ int ret;
+ FILE *fp;
+
+ fp = fopen("/sys/kernel/kexec_loaded", "r");
+ if (fp == NULL)
+ return -1;
+ fscanf(fp, "%d", &ret);
+ fclose(fp);
+ return ret;
+}
+
int main(int argc, char *argv[])
{
int do_load = 1;
@@ -818,9 +831,15 @@ int main(int argc, char *argv[])
if ((result == 0) && do_sync) {
sync();
}
- if ((result == 0) && do_ifdown) {
+ if ((result == 0) && do_ifdown) {
+ int ret;
extern int ifdown(void);
- (void)ifdown();
+ ret = sys_kexec_loaded();
+ if (!ret) {
+ fprintf(stderr,"kexec image is not loaded\n");
+ result = 1;
+ } else
+ (void)ifdown();
}
if ((result == 0) && do_exec) {
result = my_exec();