Date: Tue, 7 Sep 2010 15:23:01 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r212295 - in projects/sv/sys: amd64/amd64 arm/arm i386/i386 ia64/ia64 sparc64/sparc64 sun4v/sun4v Message-ID: <201009071523.o87FN1TA004197@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: attilio Date: Tue Sep 7 15:23:00 2010 New Revision: 212295 URL: http://svn.freebsd.org/changeset/base/212295 Log: If the upper bound is 0 the dumping mechanism will not use disks thus set dumplo to 0. Side note: in future, dumpsys() may be further layered in order to be fully disk agnostic and splitted in several functions that can be used by other code (like an eventual netdumpsys()) for building easilly their own dumping function without taking disks into account at all. This is left as further refinement after netdump enters the tree, likely. Modified: projects/sv/sys/amd64/amd64/dump_machdep.c projects/sv/sys/amd64/amd64/minidump_machdep.c projects/sv/sys/arm/arm/dump_machdep.c projects/sv/sys/arm/arm/minidump_machdep.c projects/sv/sys/i386/i386/dump_machdep.c projects/sv/sys/i386/i386/minidump_machdep.c projects/sv/sys/ia64/ia64/dump_machdep.c projects/sv/sys/sparc64/sparc64/dump_machdep.c projects/sv/sys/sun4v/sun4v/dump_machdep.c Modified: projects/sv/sys/amd64/amd64/dump_machdep.c ============================================================================== --- projects/sv/sys/amd64/amd64/dump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/amd64/amd64/dump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -296,13 +296,20 @@ dumpsys(struct dumperinfo *di) dumpsize += fileofs; hdrgap = fileofs - DEV_ALIGN(hdrsz); - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize, di->blocksize); Modified: projects/sv/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- projects/sv/sys/amd64/amd64/minidump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/amd64/amd64/minidump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -242,13 +242,20 @@ minidumpsys(struct dumperinfo *di) } dumpsize += PAGE_SIZE; - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; progress = dumpsize; /* Initialize mdhdr */ Modified: projects/sv/sys/arm/arm/dump_machdep.c ============================================================================== --- projects/sv/sys/arm/arm/dump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/arm/arm/dump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -303,13 +303,20 @@ dumpsys(struct dumperinfo *di) dumpsize += fileofs; hdrgap = fileofs - DEV_ALIGN(hdrsz); - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_ARM_VERSION, dumpsize, di->blocksize); Modified: projects/sv/sys/arm/arm/minidump_machdep.c ============================================================================== --- projects/sv/sys/arm/arm/minidump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/arm/arm/minidump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -276,14 +276,21 @@ minidumpsys(struct dumperinfo *di) dumpsize += PAGE_SIZE; - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; - } + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; + } progress = dumpsize; /* Initialize mdhdr */ Modified: projects/sv/sys/i386/i386/dump_machdep.c ============================================================================== --- projects/sv/sys/i386/i386/dump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/i386/i386/dump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -296,13 +296,20 @@ dumpsys(struct dumperinfo *di) dumpsize += fileofs; hdrgap = fileofs - DEV_ALIGN(hdrsz); - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_I386_VERSION, dumpsize, di->blocksize); Modified: projects/sv/sys/i386/i386/minidump_machdep.c ============================================================================== --- projects/sv/sys/i386/i386/minidump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/i386/i386/minidump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -242,13 +242,19 @@ minidumpsys(struct dumperinfo *di) } dumpsize += PAGE_SIZE; - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; progress = dumpsize; /* Initialize mdhdr */ Modified: projects/sv/sys/ia64/ia64/dump_machdep.c ============================================================================== --- projects/sv/sys/ia64/ia64/dump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/ia64/ia64/dump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -231,13 +231,20 @@ dumpsys(struct dumperinfo *di) dumpsize += fileofs; hdrgap = fileofs - DEV_ALIGN(hdrsz); - /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { - error = ENOSPC; - goto fail; + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + + /* Determine dump offset on device. */ + if (di->mediasize < + SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) { + error = ENOSPC; + goto fail; + } + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= sizeof(kdh) * 2; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_IA64_VERSION, dumpsize, di->blocksize); Modified: projects/sv/sys/sparc64/sparc64/dump_machdep.c ============================================================================== --- projects/sv/sys/sparc64/sparc64/dump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/sparc64/sparc64/dump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -157,17 +157,22 @@ dumpsys(struct dumperinfo *di) DEV_BSIZE); size += hdrsize; - totsize = size + 2 * sizeof(kdh); - if (totsize > di->mediasize) { - printf("Insufficient space on device (need %ld, have %ld), " - "refusing to dump.\n", (long)totsize, - (long)di->mediasize); - error = ENOSPC; - goto fail; - } + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + totsize = size + 2 * sizeof(kdh); + if (totsize > di->mediasize) { + printf("Insufficient space on device (need %ld, " + "have %ld), refusing to dump.\n", (long)totsize, + (long)di->mediasize); + error = ENOSPC; + goto fail; + } - /* Determine dump offset on device. */ - dumplo = di->mediaoffset + di->mediasize - totsize; + /* Determine dump offset on device. */ + dumplo = di->mediaoffset + di->mediasize - totsize; + } mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_SPARC64_VERSION, size, di->blocksize); Modified: projects/sv/sys/sun4v/sun4v/dump_machdep.c ============================================================================== --- projects/sv/sys/sun4v/sun4v/dump_machdep.c Tue Sep 7 14:43:42 2010 (r212294) +++ projects/sv/sys/sun4v/sun4v/dump_machdep.c Tue Sep 7 15:23:00 2010 (r212295) @@ -160,17 +160,22 @@ dumpsys(struct dumperinfo *di) DEV_BSIZE); size += hdrsize; - totsize = size + 2 * sizeof(kdh); - if (totsize > di->mediasize) { - printf("Insufficient space on device (need %ld, have %ld), " - "refusing to dump.\n", (long)totsize, - (long)di->mediasize); - error = ENOSPC; - goto fail; - } + /* If the upper bound is 0, dumper likely will not use disks. */ + if ((di->mediaoffset + di->mediasize) == 0) + dumplo = 0; + else { + totsize = size + 2 * sizeof(kdh); + if (totsize > di->mediasize) { + printf("Insufficient space on device (need %ld, " + "have %ld), refusing to dump.\n", (long)totsize, + (long)di->mediasize); + error = ENOSPC; + goto fail; + } - /* Determine dump offset on device. */ - dumplo = di->mediaoffset + di->mediasize - totsize; + /* Determine dump offset on device. */ + dumplo = di->mediaoffset + di->mediasize - totsize; + } mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_SPARC64_VERSION, size, di->blocksize);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201009071523.o87FN1TA004197>