Date: Wed, 31 Oct 2012 23:48:36 -0700 From: Alfred Perlstein <alfred@ixsystems.com> To: hackers@freebsd.org, phk@freebsd.org, pjd@freebsd.org, mav@freebsd.org Subject: please review: patch to retain device name for dumpdev. Message-ID: <50921B44.20400@ixsystems.com>
next in thread | raw e-mail | index | archive | help
I've always wanted to be able to query the current dump device. This patch lets me do this. Poul-Henning, what do you think? Is there a nicer way? Perhaps a way to include the "/dev/$device" as the patch in its current form only stores "ada0p3". I think that is OK. Provide a device name in the sysctl tree for programs to query the state of crashdump target devices. This will be used to add a "-l" (ell) flag to dumpon(8) to list the currently configured dumpdev. /usr/9-stable % svn diff sys/dev/null sys/geom sys/kern sys/sys Index: sys/dev/null/null.c =================================================================== --- sys/dev/null/null.c (revision 242367) +++ sys/dev/null/null.c (working copy) @@ -91,7 +91,7 @@ case DIOCSKERNELDUMP: error = priv_check(td, PRIV_SETDUMPER); if (error == 0) - error = set_dumper(NULL); + error = set_dumper(NULL, NULL); break; case FIONBIO: break; Index: sys/geom/geom_dev.c =================================================================== --- sys/geom/geom_dev.c (revision 242367) +++ sys/geom/geom_dev.c (working copy) @@ -351,7 +351,7 @@ case DIOCSKERNELDUMP: u = *((u_int *)data); if (!u) { - set_dumper(NULL); + set_dumper(NULL, NULL); error = 0; break; } @@ -360,7 +360,7 @@ i = sizeof kd; error = g_io_getattr("GEOM::kerneldump", cp, &i, &kd); if (!error) { - error = set_dumper(&kd.di); + error = set_dumper(&kd.di, devtoname(dev)); if (!error) dev->si_flags |= SI_DUMPDEV; } @@ -518,7 +518,7 @@ /* Reset any dump-area set on this device */ if (dev->si_flags & SI_DUMPDEV) - set_dumper(NULL); + set_dumper(NULL, NULL); /* Destroy the struct cdev *so we get no more requests */ destroy_dev(dev); Index: sys/kern/kern_shutdown.c =================================================================== --- sys/kern/kern_shutdown.c (revision 242367) +++ sys/kern/kern_shutdown.c (working copy) @@ -711,18 +711,28 @@ printf("done\n"); } +static char dumpdevname[sizeof(((struct cdev*)NULL)->si_name)]; +SYSCTL_STRING(_kern_shutdown, OID_AUTO, dumpdevname, CTLFLAG_RD, + dumpdevname, 0, "Device for kernel dumps"); + /* Registration of dumpers */ int -set_dumper(struct dumperinfo *di) +set_dumper(struct dumperinfo *di, const char *devname) { if (di == NULL) { bzero(&dumper, sizeof dumper); + dumpdevname[0] = '\0'; return (0); } if (dumper.dumper != NULL) return (EBUSY); dumper = *di; + strlcpy(dumpdevname, devname, sizeof(dumpdevname)); + if (strlen(dumpdevname) != strlen(devname)) { + printf("set_dumper: device name truncated from '%s' -> '%s'\n", + devname, dumpdevname); + } return (0); } Index: sys/sys/conf.h =================================================================== --- sys/sys/conf.h (revision 242367) +++ sys/sys/conf.h (working copy) @@ -335,7 +335,7 @@ off_t mediasize; /* Space available in bytes. */ }; -int set_dumper(struct dumperinfo *); +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 doadump(boolean_t);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50921B44.20400>