Date: Tue, 25 Jan 2011 15:18:10 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r217827 - projects/graid/head/sys/geom Message-ID: <201101251518.p0PFIATq038681@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Tue Jan 25 15:18:10 2011 New Revision: 217827 URL: http://svn.freebsd.org/changeset/base/217827 Log: Change BIO_GETATTR("GEOM::kerneldump") API to make set_dumper() called by consumer (geom_dev) instead of provider (geom_disk). This allows any geom insert it's code into the dump call chain, implementing more sophisticated functionality then just disk partitioning. Modified: projects/graid/head/sys/geom/geom.h projects/graid/head/sys/geom/geom_dev.c projects/graid/head/sys/geom/geom_disk.c Modified: projects/graid/head/sys/geom/geom.h ============================================================================== --- projects/graid/head/sys/geom/geom.h Tue Jan 25 15:06:50 2011 (r217826) +++ projects/graid/head/sys/geom/geom.h Tue Jan 25 15:18:10 2011 (r217827) @@ -43,6 +43,7 @@ #include <sys/sx.h> #include <sys/queue.h> #include <sys/ioccom.h> +#include <sys/conf.h> #include <sys/sbuf.h> #include <sys/module.h> @@ -303,6 +304,7 @@ extern struct sx topology_lock; struct g_kerneldump { off_t offset; off_t length; + struct dumperinfo di; }; MALLOC_DECLARE(M_GEOM); Modified: projects/graid/head/sys/geom/geom_dev.c ============================================================================== --- projects/graid/head/sys/geom/geom_dev.c Tue Jan 25 15:06:50 2011 (r217826) +++ projects/graid/head/sys/geom/geom_dev.c Tue Jan 25 15:18:10 2011 (r217827) @@ -289,8 +289,11 @@ g_dev_ioctl(struct cdev *dev, u_long cmd kd.length = OFF_MAX; i = sizeof kd; error = g_io_getattr("GEOM::kerneldump", cp, &i, &kd); - if (!error) - dev->si_flags |= SI_DUMPDEV; + if (!error) { + error = set_dumper(&kd.di); + if (!error) + dev->si_flags |= SI_DUMPDEV; + } break; case DIOCGFLUSH: error = g_io_flush(cp); Modified: projects/graid/head/sys/geom/geom_disk.c ============================================================================== --- projects/graid/head/sys/geom/geom_disk.c Tue Jan 25 15:06:50 2011 (r217826) +++ projects/graid/head/sys/geom/geom_disk.c Tue Jan 25 15:18:10 2011 (r217827) @@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$"); #include <sys/kernel.h> #include <sys/sysctl.h> #include <sys/bio.h> -#include <sys/conf.h> #include <sys/ctype.h> #include <sys/fcntl.h> #include <sys/malloc.h> @@ -164,9 +163,7 @@ g_disk_access(struct g_provider *pp, int static void g_disk_kerneldump(struct bio *bp, struct disk *dp) { - int error; struct g_kerneldump *gkd; - struct dumperinfo di; struct g_geom *gp; gkd = (struct g_kerneldump*)bp->bio_data; @@ -177,16 +174,15 @@ g_disk_kerneldump(struct bio *bp, struct g_io_deliver(bp, ENODEV); return; } - di.dumper = dp->d_dump; - di.priv = dp; - di.blocksize = dp->d_sectorsize; - di.maxiosize = dp->d_maxsize; - di.mediaoffset = gkd->offset; + gkd->di.dumper = dp->d_dump; + gkd->di.priv = dp; + gkd->di.blocksize = dp->d_sectorsize; + gkd->di.maxiosize = dp->d_maxsize; + gkd->di.mediaoffset = gkd->offset; if ((gkd->offset + gkd->length) > dp->d_mediasize) gkd->length = dp->d_mediasize - gkd->offset; - di.mediasize = gkd->length; - error = set_dumper(&di); - g_io_deliver(bp, error); + gkd->di.mediasize = gkd->length; + g_io_deliver(bp, 0); } static void
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101251518.p0PFIATq038681>