summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_disk.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2011-03-24 08:37:48 +0000
committermav <mav@FreeBSD.org>2011-03-24 08:37:48 +0000
commitad433c09b32c442209795217720d42efac493286 (patch)
tree055755d318b2a54215757a1de7d027bed661d375 /sys/geom/geom_disk.c
parent7750aaa40d1f06323ed27a2db069f660c1f245ba (diff)
downloadFreeBSD-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.c20
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
OpenPOWER on IntegriCloud