svn commit: r212142 - in projects/sv/sys: amd64/amd64 arm/arm geom
i386/i386 ia64/ia64 net powerpc/powerpc sparc64/sparc64
sun4v/sun4v sys
Attilio Rao
attilio at FreeBSD.org
Thu Sep 2 09:33:48 UTC 2010
Author: attilio
Date: Thu Sep 2 09:33:48 2010
New Revision: 212142
URL: http://svn.freebsd.org/changeset/base/212142
Log:
Introduce a flag field for the dumpers and use it immediately for the
DIF_NET flag.
This flag is responsible for toggling a netdump and having a correct set
of dumplo in the dumping routines.
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/geom/geom_disk.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/net/netdump_client.c
projects/sv/sys/powerpc/powerpc/dump_machdep.c
projects/sv/sys/sparc64/sparc64/dump_machdep.c
projects/sv/sys/sun4v/sun4v/dump_machdep.c
projects/sv/sys/sys/conf.h
Modified: projects/sv/sys/amd64/amd64/dump_machdep.c
==============================================================================
--- projects/sv/sys/amd64/amd64/dump_machdep.c Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/amd64/amd64/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -297,12 +297,17 @@ dumpsys(struct dumperinfo *di)
hdrgap = fileofs - DEV_ALIGN(hdrsz);
/* Determine dump offset on device. */
- if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
- error = ENOSPC;
- goto fail;
+ if ((di->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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 Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/amd64/amd64/minidump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -243,12 +243,17 @@ 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->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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 Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/arm/arm/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -304,12 +304,17 @@ dumpsys(struct dumperinfo *di)
hdrgap = fileofs - DEV_ALIGN(hdrsz);
/* Determine dump offset on device. */
- if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
- error = ENOSPC;
- goto fail;
+ if ((di->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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 Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/arm/arm/minidump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -277,13 +277,18 @@ 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->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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/geom/geom_disk.c
==============================================================================
--- projects/sv/sys/geom/geom_disk.c Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/geom/geom_disk.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -182,6 +182,7 @@ g_disk_kerneldump(struct bio *bp, struct
di.blocksize = dp->d_sectorsize;
di.maxiosize = dp->d_maxsize;
di.mediaoffset = gkd->offset;
+ di.flags = 0;
if ((gkd->offset + gkd->length) > dp->d_mediasize)
gkd->length = dp->d_mediasize - gkd->offset;
di.mediasize = gkd->length;
Modified: projects/sv/sys/i386/i386/dump_machdep.c
==============================================================================
--- projects/sv/sys/i386/i386/dump_machdep.c Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/i386/i386/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -297,12 +297,17 @@ dumpsys(struct dumperinfo *di)
hdrgap = fileofs - DEV_ALIGN(hdrsz);
/* Determine dump offset on device. */
- if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
- error = ENOSPC;
- goto fail;
+ if ((di->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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 Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/i386/i386/minidump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -243,12 +243,17 @@ 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->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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 Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/ia64/ia64/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -232,12 +232,17 @@ dumpsys(struct dumperinfo *di)
hdrgap = fileofs - DEV_ALIGN(hdrsz);
/* Determine dump offset on device. */
- if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
- error = ENOSPC;
- goto fail;
+ if ((di->flags & DIF_NET) != 0)
+ dumplo = 0;
+ else {
+ 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/net/netdump_client.c
==============================================================================
--- projects/sv/sys/net/netdump_client.c Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/net/netdump_client.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -1223,7 +1223,7 @@ netdump_trigger(void *arg, int howto)
dumper.dumper = netdump_dumper;
dumper.priv = NULL;
dumper.blocksize = NETDUMP_DATASIZE;
- dumper.flags = DF_NET;
+ dumper.flags = DIF_NET;
/* in dump_machdep.c */
dumpsys(&dumper);
Modified: projects/sv/sys/powerpc/powerpc/dump_machdep.c
==============================================================================
--- projects/sv/sys/powerpc/powerpc/dump_machdep.c Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/powerpc/powerpc/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -233,8 +233,8 @@ dumpsys(struct dumperinfo *di)
dumpsize += fileofs;
hdrgap = fileofs - DEV_ALIGN(hdrsz);
- /* For block devices, determine the dump offset on the device. */
- if (di->mediasize > 0) {
+ /* Determine dump offset on device. */
+ if ((di->flags & DIF_NET) == 0 && di->mediasize > 0) {
if (di->mediasize <
SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
error = ENOSPC;
Modified: projects/sv/sys/sparc64/sparc64/dump_machdep.c
==============================================================================
--- projects/sv/sys/sparc64/sparc64/dump_machdep.c Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/sparc64/sparc64/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -167,7 +167,8 @@ dumpsys(struct dumperinfo *di)
}
/* Determine dump offset on device. */
- dumplo = di->mediaoffset + di->mediasize - totsize;
+ dumplo = (di->flags & DIF_NET) != 0 ? 0 :
+ 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 Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/sun4v/sun4v/dump_machdep.c Thu Sep 2 09:33:48 2010 (r212142)
@@ -170,7 +170,8 @@ dumpsys(struct dumperinfo *di)
}
/* Determine dump offset on device. */
- dumplo = di->mediaoffset + di->mediasize - totsize;
+ dumplo = (di->flags & DIF_NET) != 0 ? 0 :
+ di->mediaoffset + di->mediasize - totsize;
mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_SPARC64_VERSION, size, di->blocksize);
Modified: projects/sv/sys/sys/conf.h
==============================================================================
--- projects/sv/sys/sys/conf.h Thu Sep 2 07:49:45 2010 (r212141)
+++ projects/sv/sys/sys/conf.h Thu Sep 2 09:33:48 2010 (r212142)
@@ -317,6 +317,8 @@ EVENTHANDLER_DECLARE(dev_clone, dev_clon
/* Stuff relating to kernel-dump */
+#define DIF_NET 0x01 /* Dump over network. */
+
struct dumperinfo {
dumper_t *dumper; /* Dumping function. */
void *priv; /* Private parts. */
@@ -324,6 +326,7 @@ struct dumperinfo {
u_int maxiosize; /* Max size allowed for an individual I/O */
off_t mediaoffset; /* Initial offset in bytes. */
off_t mediasize; /* Space available in bytes. */
+ u_int flags; /* Dump device flags. */
};
int set_dumper(struct dumperinfo *);
More information about the svn-src-projects
mailing list