summaryrefslogtreecommitdiffstats
path: root/sys/geom/raid/g_raid.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/raid/g_raid.c')
-rw-r--r--sys/geom/raid/g_raid.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/geom/raid/g_raid.c b/sys/geom/raid/g_raid.c
index a161f8a..858cf4c 100644
--- a/sys/geom/raid/g_raid.c
+++ b/sys/geom/raid/g_raid.c
@@ -2251,6 +2251,8 @@ g_raid_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
return (NULL);
G_RAID_DEBUG(2, "Tasting provider %s.", pp->name);
+ geom = NULL;
+ status = G_RAID_MD_TASTE_FAIL;
gp = g_new_geomf(mp, "raid:taste");
/*
* This orphan function should be never called.
@@ -2259,8 +2261,9 @@ g_raid_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
cp = g_new_consumer(gp);
cp->flags |= G_CF_DIRECT_RECEIVE;
g_attach(cp, pp);
+ if (g_access(cp, 1, 0, 0) != 0)
+ goto ofail;
- geom = NULL;
LIST_FOREACH(class, &g_raid_md_classes, mdc_list) {
if (!class->mdc_enable)
continue;
@@ -2276,6 +2279,9 @@ g_raid_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
break;
}
+ if (status == G_RAID_MD_TASTE_FAIL)
+ (void)g_access(cp, -1, 0, 0);
+ofail:
g_detach(cp);
g_destroy_consumer(cp);
g_destroy_geom(gp);
OpenPOWER on IntegriCloud