diff --git a/sys/arm/arm/dump_machdep.c b/sys/arm/arm/dump_machdep.c index 5056a33..b5a37f2 100644 --- a/sys/arm/arm/dump_machdep.c +++ b/sys/arm/arm/dump_machdep.c @@ -269,22 +269,22 @@ foreach_chunk(callback_t cb, void *arg) mdp = md_pa_next(mdp); } return (seqnr); } -void +int dumpsys(struct dumperinfo *di) { Elf_Ehdr ehdr; uint32_t dumpsize; off_t hdrgap; size_t hdrsz; int error; if (do_minidump) { minidumpsys(di); - return; + return (0); } bzero(&ehdr, sizeof(ehdr)); ehdr.e_ident[EI_MAG0] = ELFMAG0; ehdr.e_ident[EI_MAG1] = ELFMAG1; @@ -366,11 +366,11 @@ dumpsys(struct dumperinfo *di) goto fail; /* Signal completion, signoff and exit stage left. */ dump_write(di, NULL, 0, 0, 0); printf("\nDump complete\n"); - return; + return (0); fail: if (error < 0) error = -error; @@ -378,6 +378,7 @@ dumpsys(struct dumperinfo *di) printf("\nDump aborted\n"); else if (error == ENOSPC) printf("\nDump failed. Partition too small.\n"); else printf("\n** DUMP FAILED (ERROR %d) **\n", error); + return (error); } diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c index dba6a43..dfdca15 100644 --- a/sys/kern/kern_shutdown.c +++ b/sys/kern/kern_shutdown.c @@ -247,11 +247,13 @@ print_uptime(void) int doadump(boolean_t textdump) { boolean_t coredump; + int error; + error = 0; if (dumping) return (EBUSY); if (dumper.dumper == NULL) return (ENXIO); @@ -265,14 +267,14 @@ doadump(boolean_t textdump) coredump = FALSE; textdump_dumpsys(&dumper); } #endif if (coredump) - dumpsys(&dumper); + error = dumpsys(&dumper); dumping--; - return (0); + return (error); } static int isbufbusy(struct buf *bp) { diff --git a/sys/mips/mips/dump_machdep.c b/sys/mips/mips/dump_machdep.c index 54224f2..26f93ff 100644 --- a/sys/mips/mips/dump_machdep.c +++ b/sys/mips/mips/dump_machdep.c @@ -255,22 +255,22 @@ foreach_chunk(callback_t cb, void *arg) mdp = md_pa_next(mdp); } return (seqnr); } -void +int dumpsys(struct dumperinfo *di) { Elf_Ehdr ehdr; uint32_t dumpsize; off_t hdrgap; size_t hdrsz; int error; if (do_minidump) { minidumpsys(di); - return; + return (0); } bzero(&ehdr, sizeof(ehdr)); ehdr.e_ident[EI_MAG0] = ELFMAG0; ehdr.e_ident[EI_MAG1] = ELFMAG1; @@ -352,11 +352,11 @@ dumpsys(struct dumperinfo *di) goto fail; /* Signal completion, signoff and exit stage left. */ dump_write(di, NULL, 0, 0, 0); printf("\nDump complete\n"); - return; + return (0); fail: if (error < 0) error = -error; @@ -364,6 +364,7 @@ dumpsys(struct dumperinfo *di) printf("\nDump aborted\n"); else if (error == ENOSPC) printf("\nDump failed. Partition too small.\n"); else printf("\n** DUMP FAILED (ERROR %d) **\n", error); + return (error); } diff --git a/sys/powerpc/powerpc/dump_machdep.c b/sys/powerpc/powerpc/dump_machdep.c index 2de664c..14e2f0f 100644 --- a/sys/powerpc/powerpc/dump_machdep.c +++ b/sys/powerpc/powerpc/dump_machdep.c @@ -203,11 +203,11 @@ foreach_chunk(callback_t cb, void *arg) md = pmap_scan_md(md); } return (seqnr); } -void +int dumpsys(struct dumperinfo *di) { Elf_Ehdr ehdr; uint32_t dumpsize; off_t hdrgap; @@ -297,11 +297,11 @@ dumpsys(struct dumperinfo *di) goto fail; /* Signal completion, signoff and exit stage left. */ dump_write(di, NULL, 0, 0, 0); printf("\nDump complete\n"); - return; + return (0); fail: if (error < 0) error = -error; @@ -309,6 +309,7 @@ dumpsys(struct dumperinfo *di) printf("\nDump aborted\n"); else if (error == ENOSPC) printf("\nDump failed. Partition too small.\n"); else printf("\n** DUMP FAILED (ERROR %d) **\n", error); + return (error); } diff --git a/sys/sparc64/sparc64/dump_machdep.c b/sys/sparc64/sparc64/dump_machdep.c index d5409ac..5af21cc 100644 --- a/sys/sparc64/sparc64/dump_machdep.c +++ b/sys/sparc64/sparc64/dump_machdep.c @@ -140,11 +140,11 @@ blk_dump(struct dumperinfo *di, vm_paddr_t pa, vm_size_t size) } printf("... %s\n", (error) ? "fail" : "ok"); return (error); } -void +int dumpsys(struct dumperinfo *di) { struct sparc64_dump_hdr hdr; vm_size_t size, totsize, hdrsize; int error, i, nreg; @@ -216,11 +216,12 @@ dumpsys(struct dumperinfo *di) goto fail; /* Signal completion, signoff and exit stage left. */ dump_write(di, NULL, 0, 0, 0); printf("\nDump complete\n"); - return; + return (0); fail: /* XXX It should look more like VMS :-) */ printf("** DUMP FAILED (ERROR %d) **\n", error); + return (error); } diff --git a/sys/sys/conf.h b/sys/sys/conf.h index e9a2f55..f8a9a3c 100644 --- a/sys/sys/conf.h +++ b/sys/sys/conf.h @@ -334,11 +334,11 @@ struct dumperinfo { off_t mediasize; /* Space available in bytes. */ }; int set_dumper(struct dumperinfo *, const char *_devname); int dump_write(struct dumperinfo *, void *, vm_offset_t, off_t, size_t); -void dumpsys(struct dumperinfo *); +int dumpsys(struct dumperinfo *); int doadump(boolean_t); extern int dumping; /* system is dumping */ #endif /* _KERNEL */ diff --git a/sys/x86/x86/dump_machdep.c b/sys/x86/x86/dump_machdep.c index 30fa719..940c5193 100644 --- a/sys/x86/x86/dump_machdep.c +++ b/sys/x86/x86/dump_machdep.c @@ -264,22 +264,22 @@ foreach_chunk(callback_t cb, void *arg) mdp = md_pa_next(mdp); } return (seqnr); } -void +int dumpsys(struct dumperinfo *di) { Elf_Ehdr ehdr; uint64_t dumpsize; off_t hdrgap; size_t hdrsz; int error; if (do_minidump) { minidumpsys(di); - return; + return (0); } bzero(&ehdr, sizeof(ehdr)); ehdr.e_ident[EI_MAG0] = ELFMAG0; ehdr.e_ident[EI_MAG1] = ELFMAG1; ehdr.e_ident[EI_MAG2] = ELFMAG2; @@ -361,11 +361,11 @@ dumpsys(struct dumperinfo *di) goto fail; /* Signal completion, signoff and exit stage left. */ dump_write(di, NULL, 0, 0, 0); printf("\nDump complete\n"); - return; + return (0); fail: if (error < 0) error = -error; @@ -373,6 +373,7 @@ dumpsys(struct dumperinfo *di) printf("\nDump aborted\n"); else if (error == ENOSPC) printf("\nDump failed. Partition too small.\n"); else printf("\n** DUMP FAILED (ERROR %d) **\n", error); + return (error); }