--- md.c Tue Jan 31 14:35:30 2006
+++ /home/dunstan/p4/md/src/sys/dev/md/md.c Sun Mar 26 20:16:46 2006
@@ -120,6 +120,8 @@
static g_fini_t g_md_fini;
static g_start_t g_md_start;
static g_access_t g_md_access;
+static void g_md_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
+ struct g_consumer *cp __unused, struct g_provider *pp);
static int mdunits;
static struct cdev *status_dev = 0;
@@ -140,6 +142,7 @@
.fini = g_md_fini,
.start = g_md_start,
.access = g_md_access,
+ .dumpconf = g_md_dumpconf,
};
DECLARE_GEOM_CLASS(g_md_class, g_md);
@@ -1175,6 +1178,65 @@
status_dev = make_dev(&mdctl_cdevsw, MAXMINOR, UID_ROOT, GID_WHEEL,
0600, MDCTL_NAME);
g_topology_lock();
+}
+
+static void
+g_md_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
+ struct g_consumer *cp __unused, struct g_provider *pp)
+{
+ struct md_s *mp;
+ char *type;
+
+ mp = gp->softc;
+ if (mp == NULL)
+ return;
+
+ switch (mp->type) {
+ case MD_MALLOC:
+ type = "malloc";
+ break;
+ case MD_PRELOAD:
+ type = "preload";
+ break;
+ case MD_VNODE:
+ type = "vnode";
+ break;
+ case MD_SWAP:
+ type = "swap";
+ break;
+ default:
+ type = "unknown";
+ break;
+ }
+
+ if (pp != NULL) {
+ if (indent == NULL) {
+ sbuf_printf(sb, " u %d", mp->unit);
+ sbuf_printf(sb, " s %ju", (uintmax_t) mp->sectorsize);
+ sbuf_printf(sb, " f %ju", (uintmax_t) mp->fwheads);
+ sbuf_printf(sb, " fs %ju", (uintmax_t) mp->fwsectors);
+ sbuf_printf(sb, " l %ju", (uintmax_t) mp->mediasize);
+ sbuf_printf(sb, " t %s", type);
+ if (mp->type == MD_VNODE && mp->vnode != NULL)
+ sbuf_printf(sb, " file %s", mp->file);
+ } else {
+ sbuf_printf(sb, "%s%d\n", indent,
+ mp->unit);
+ sbuf_printf(sb, "%s%ju\n",
+ indent, (uintmax_t) mp->sectorsize);
+ sbuf_printf(sb, "%s%ju\n",
+ indent, (uintmax_t) mp->fwheads);
+ sbuf_printf(sb, "%s%ju\n",
+ indent, (uintmax_t) mp->fwsectors);
+ sbuf_printf(sb, "%s%ju\n",
+ indent, (uintmax_t) mp->mediasize);
+ sbuf_printf(sb, "%s%s\n", indent,
+ type);
+ if (mp->type == MD_VNODE && mp->vnode != NULL)
+ sbuf_printf(sb, "%s%s\n",
+ indent, mp->file);
+ }
+ }
}
static void