diff options
author | pjd <pjd@FreeBSD.org> | 2004-08-09 11:14:25 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2004-08-09 11:14:25 +0000 |
commit | 8da7f212eb86a785be5e723cb0de5d968c9b159b (patch) | |
tree | 33baeacb69499603d7dcf852e68770fbdabcc1e0 | |
parent | 6a44735c94fea6d18675f2d972efa5c4afec0cf9 (diff) | |
download | FreeBSD-src-8da7f212eb86a785be5e723cb0de5d968c9b159b.zip FreeBSD-src-8da7f212eb86a785be5e723cb0de5d968c9b159b.tar.gz |
Do not use g_wither_geom(9). I doesn't work in the way which is expected
here anymore (after g_wither_washer() was introduced), i.e. geom and consumer
will not be immediately destroyed if possible.
-rw-r--r-- | sys/geom/concat/g_concat.c | 5 | ||||
-rw-r--r-- | sys/geom/label/g_label.c | 20 | ||||
-rw-r--r-- | sys/geom/stripe/g_stripe.c | 5 |
3 files changed, 14 insertions, 16 deletions
diff --git a/sys/geom/concat/g_concat.c b/sys/geom/concat/g_concat.c index 943ac2b..480b30d 100644 --- a/sys/geom/concat/g_concat.c +++ b/sys/geom/concat/g_concat.c @@ -552,9 +552,10 @@ g_concat_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->orphan = g_concat_orphan; cp = g_new_consumer(gp); g_attach(cp, pp); - error = g_concat_read_metadata(cp, &md); - g_wither_geom(gp, ENXIO); + g_detach(cp); + g_destroy_consumer(cp); + g_destroy_geom(gp); if (error != 0) return (NULL); gp = NULL; diff --git a/sys/geom/label/g_label.c b/sys/geom/label/g_label.c index fdc05c1..c6f7217 100644 --- a/sys/geom/label/g_label.c +++ b/sys/geom/label/g_label.c @@ -194,7 +194,7 @@ g_label_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) struct g_label_metadata md; struct g_consumer *cp; struct g_geom *gp; - int error, i; + int i; g_trace(G_T_TOPOLOGY, "%s(%s, %s)", __func__, mp->name, pp->name); g_topology_assert(); @@ -210,15 +210,10 @@ g_label_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->orphan = g_label_orphan; cp = g_new_consumer(gp); g_attach(cp, pp); - error = g_access(cp, 1, 0, 0); - if (error != 0) { - g_wither_geom(gp, ENXIO); - return (NULL); - } - + if (g_access(cp, 1, 0, 0) != 0) + goto end; do { - error = g_label_read_metadata(cp, &md); - if (error != 0) + if (g_label_read_metadata(cp, &md) != 0) break; if (strcmp(md.md_magic, G_LABEL_MAGIC) != 0) break; @@ -241,10 +236,11 @@ g_label_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) g_label_create(NULL, mp, pp, label, g_labels[i]->ld_dir, pp->mediasize); } - g_access(cp, -1, 0, 0); - g_wither_geom(gp, ENXIO); - +end: + g_detach(cp); + g_destroy_consumer(cp); + g_destroy_geom(gp); return (NULL); } diff --git a/sys/geom/stripe/g_stripe.c b/sys/geom/stripe/g_stripe.c index e3106b4..017cf3c 100644 --- a/sys/geom/stripe/g_stripe.c +++ b/sys/geom/stripe/g_stripe.c @@ -883,9 +883,10 @@ g_stripe_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) gp->orphan = g_stripe_orphan; cp = g_new_consumer(gp); g_attach(cp, pp); - error = g_stripe_read_metadata(cp, &md); - g_wither_geom(gp, ENXIO); + g_detach(cp); + g_destroy_consumer(cp); + g_destroy_geom(gp); if (error != 0) return (NULL); gp = NULL; |