summaryrefslogtreecommitdiffstats
path: root/sys/geom/label/g_label.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-02-18 11:24:00 +0000
committerpjd <pjd@FreeBSD.org>2006-02-18 11:24:00 +0000
commit5729ae2a57c3327356e04ecd66634c4ee8ad5cbb (patch)
treee783be25dff385a7aa85f2d511b415b9177d8ea3 /sys/geom/label/g_label.c
parentc2f8ebb2b6871184d7c8c87c8aac1de88017b04a (diff)
downloadFreeBSD-src-5729ae2a57c3327356e04ecd66634c4ee8ad5cbb.zip
FreeBSD-src-5729ae2a57c3327356e04ecd66634c4ee8ad5cbb.tar.gz
Inform when label disappears.
MFC after: 3 days
Diffstat (limited to 'sys/geom/label/g_label.c')
-rw-r--r--sys/geom/label/g_label.c52
1 files changed, 36 insertions, 16 deletions
diff --git a/sys/geom/label/g_label.c b/sys/geom/label/g_label.c
index 74e03cb..afd823e 100644
--- a/sys/geom/label/g_label.c
+++ b/sys/geom/label/g_label.c
@@ -99,26 +99,21 @@ g_label_destroy_geom(struct gctl_req *req __unused, struct g_class *mp,
}
static void
-g_label_orphan(struct g_consumer *cp __unused)
+g_label_orphan(struct g_consumer *cp)
{
- KASSERT(1 == 0, ("%s called?", __func__));
+ G_LABEL_DEBUG(0, "Label %s removed.",
+ LIST_FIRST(&cp->geom->provider)->name);
+ g_slice_orphan(cp);
}
static void
-g_label_start(struct bio *bp __unused)
+g_label_spoiled(struct g_consumer *cp)
{
- KASSERT(1 == 0, ("%s called?", __func__));
-}
-
-static int
-g_label_access(struct g_provider *pp __unused, int dr __unused, int dw __unused,
- int de __unused)
-{
-
- KASSERT(1 == 0, ("%s called", __func__));
- return (EOPNOTSUPP);
+ G_LABEL_DEBUG(0, "Label %s removed.",
+ LIST_FIRST(&cp->geom->provider)->name);
+ g_slice_spoiled(cp);
}
static struct g_geom *
@@ -156,6 +151,8 @@ g_label_create(struct gctl_req *req, struct g_class *mp, struct g_provider *pp,
gctl_error(req, "Cannot create slice %s.", label);
return (NULL);
}
+ gp->orphan = g_label_orphan;
+ gp->spoiled = g_label_spoiled;
g_access(cp, -1, 0, 0);
g_slice_config(gp, 0, G_SLICE_CONFIG_SET, (off_t)0, mediasize,
pp->sectorsize, name);
@@ -211,6 +208,29 @@ g_label_read_metadata(struct g_consumer *cp, struct g_label_metadata *md)
return (0);
}
+static void
+g_label_orphan_taste(struct g_consumer *cp __unused)
+{
+
+ KASSERT(1 == 0, ("%s called?", __func__));
+}
+
+static void
+g_label_start_taste(struct bio *bp __unused)
+{
+
+ KASSERT(1 == 0, ("%s called?", __func__));
+}
+
+static int
+g_label_access_taste(struct g_provider *pp __unused, int dr __unused,
+ int dw __unused, int de __unused)
+{
+
+ KASSERT(1 == 0, ("%s called", __func__));
+ return (EOPNOTSUPP);
+}
+
static struct g_geom *
g_label_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
{
@@ -228,9 +248,9 @@ g_label_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
return (NULL);
gp = g_new_geomf(mp, "label:taste");
- gp->start = g_label_start;
- gp->access = g_label_access;
- gp->orphan = g_label_orphan;
+ gp->start = g_label_start_taste;
+ gp->access = g_label_access_taste;
+ gp->orphan = g_label_orphan_taste;
cp = g_new_consumer(gp);
g_attach(cp, pp);
if (g_access(cp, 1, 0, 0) != 0)
OpenPOWER on IntegriCloud