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.
This commit is contained in:
Pawel Jakub Dawidek 2004-08-09 11:14:25 +00:00
parent 7866c62aa6
commit 7e72a70863
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=133371
3 changed files with 14 additions and 16 deletions

View File

@ -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;

View File

@ -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);
}

View File

@ -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;