FreeBSD Bugzilla – Attachment 149271 Details for
Bug 188187
[zfs] [panic] 10-stable: Kernel panic on zpool import: integer divide fault
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
early dump dev
early-dumpdev.patch (text/plain), 3.39 KB, created by
Steven Hartland
on 2014-11-10 22:51:05 UTC
(
hide
)
Description:
early dump dev
Filename:
MIME Type:
Creator:
Steven Hartland
Created:
2014-11-10 22:51:05 UTC
Size:
3.39 KB
patch
obsolete
>Quick patch which configures kernel dump location prior to mounting root. > >The location is controlled by the new tunable: >kern.shutdown.dumpdev_early > >An example of configuring it would be to add the following to /boot/loader.conf: >kern.shutdown.dumpdev_early="ada4p3" > >This would configure kernel dumps on ata disk 4 partition 3. > >The usual rules should be maintained when picking a device i.e. choose a device >use for swap or otherwise unused. >--- sys/kern/kern_shutdown.c.orig 2014-05-04 23:37:01.954116628 +0000 >+++ sys/kern/kern_shutdown.c 2014-05-06 00:28:54.591101862 +0000 >@@ -50,12 +50,14 @@ __FBSDID("$FreeBSD: releng/10.0/sys/kern > #include <sys/conf.h> > #include <sys/cons.h> > #include <sys/eventhandler.h> >+#include <sys/fcntl.h> > #include <sys/jail.h> > #include <sys/kdb.h> > #include <sys/kernel.h> > #include <sys/kerneldump.h> > #include <sys/kthread.h> > #include <sys/ktr.h> >+#include <sys/limits.h> > #include <sys/malloc.h> > #include <sys/mount.h> > #include <sys/priv.h> >@@ -72,6 +74,9 @@ __FBSDID("$FreeBSD: releng/10.0/sys/kern > > #include <ddb/ddb.h> > >+#include <fs/devfs/devfs_int.h> >+#include <geom/geom.h> >+ > #include <machine/cpu.h> > #include <machine/pcb.h> > #include <machine/smp.h> >@@ -245,6 +250,72 @@ print_uptime(void) > printf("%lds\n", (long)ts.tv_sec); > } > >+static char dumpdev_early[MAXPATHLEN]; >+TUNABLE_STR("kern.shutdown.dumpdev_early", dumpdev_early, >+ sizeof(dumpdev_early)); >+SYSCTL_STRING(_kern_shutdown, OID_AUTO, dumpdev_early, CTLFLAG_RDTUN, >+ dumpdev_early, 0, "Device used for early kernel dumps (pre-mountroot)"); >+ >+int >+setdumpdev(char *devname) >+{ >+ struct thread *td = curthread; >+ int error, i, ref; >+ struct g_consumer *cp; >+ struct g_kerneldump kd; >+ struct cdev_priv *cdp; >+ struct cdev *dev; >+ struct cdevsw *dsw; >+ >+ if (devname == NULL || strlen(devname) == 0) >+ return (set_dumper(NULL, NULL)); >+ >+ dev = NULL; >+ dev_lock(); >+ TAILQ_FOREACH(cdp, &cdevp_list, cdp_list) { >+ dev = &cdp->cdp_c; >+ if (strcmp(dev->si_name, devname) == 0) >+ break; >+ dev = NULL; >+ } >+ dev_unlock(); >+ >+ if (dev == NULL) >+ return (ENOENT); >+ >+ dsw = dev_refthread(dev, &ref); >+ if (dsw == NULL) >+ return (ENXIO); >+ >+ error = dsw->d_open(dev, FREAD, 0, td); >+ if (error != 0) { >+ dev_relthread(dev, ref); >+ return (error); >+ } >+ >+ cp = dev->si_drv2; >+ kd.offset = 0; >+ kd.length = OFF_MAX; >+ i = sizeof(kd); >+ error = g_io_getattr("GEOM::kerneldump", cp, &i, &kd); >+ if (error == 0) { >+ error = set_dumper(&kd.di, devtoname(dev)); >+ if (error == 0) >+ dev->si_flags |= SI_DUMPDEV; >+ } >+ >+ (void)dev->si_devsw->d_close(dev, FREAD, 0, td); >+ dev_relthread(dev, ref); >+ >+ return (error); >+} >+ >+int >+setdumpdev_early(void) >+{ >+ return (setdumpdev(dumpdev_early)); >+} >+ > int > doadump(boolean_t textdump) > { >--- sys/kern/init_main.c.orig 2014-05-05 18:06:24.008837474 +0000 >+++ sys/kern/init_main.c 2014-05-05 22:39:52.964175470 +0000 >@@ -697,6 +697,8 @@ start_init(void *dummy) > struct thread *td; > struct proc *p; > >+ setdumpdev_early(); >+ > mtx_lock(&Giant); > > GIANT_REQUIRED; >--- sys/sys/conf.h.orig 2014-05-05 02:20:24.408440686 +0000 >+++ sys/sys/conf.h 2014-05-05 15:21:06.150967151 +0000 >@@ -338,6 +338,8 @@ int set_dumper(struct dumperinfo *, cons > int dump_write(struct dumperinfo *, void *, vm_offset_t, off_t, size_t); > void dumpsys(struct dumperinfo *); > int doadump(boolean_t); >+int setdumpdev_early(void); >+int setdumpdev(char *); > extern int dumping; /* system is dumping */ > > #endif /* _KERNEL */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 188187
: 149271