diff options
author | mav <mav@FreeBSD.org> | 2011-03-24 08:37:48 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2011-03-24 08:37:48 +0000 |
commit | ad433c09b32c442209795217720d42efac493286 (patch) | |
tree | 055755d318b2a54215757a1de7d027bed661d375 /sys/geom/geom_disk.c | |
parent | 7750aaa40d1f06323ed27a2db069f660c1f245ba (diff) | |
download | FreeBSD-src-ad433c09b32c442209795217720d42efac493286.zip FreeBSD-src-ad433c09b32c442209795217720d42efac493286.tar.gz |
MFgraid/head r217827:
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.
Diffstat (limited to 'sys/geom/geom_disk.c')
-rw-r--r-- | sys/geom/geom_disk.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index 818b656..6e09ea9 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -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> @@ -163,10 +162,8 @@ g_disk_access(struct g_provider *pp, int r, int w, int e) 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 disk *dp) 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 |