diff options
author | mav <mav@FreeBSD.org> | 2012-09-13 13:27:09 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2012-09-13 13:27:09 +0000 |
commit | db9e01aca9af40e4b56657bc713041a28462e06b (patch) | |
tree | 0ff95415709412d6c621a94ef09cd40e80d7600e /sys/geom/raid/g_raid.c | |
parent | 10608e7d855a9c973b57055bfc2e87284c68ce9e (diff) | |
download | FreeBSD-src-db9e01aca9af40e4b56657bc713041a28462e06b.zip FreeBSD-src-db9e01aca9af40e4b56657bc713041a28462e06b.tar.gz |
Add global and per-module sysctls/tunables to enable/disable metadata taste.
That should help to handle some cases when disk has some RAID metadata that
should be ignored, especially during boot.
MFC after: 3 days
Diffstat (limited to 'sys/geom/raid/g_raid.c')
-rw-r--r-- | sys/geom/raid/g_raid.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/geom/raid/g_raid.c b/sys/geom/raid/g_raid.c index b92dd56..d03c2e8 100644 --- a/sys/geom/raid/g_raid.c +++ b/sys/geom/raid/g_raid.c @@ -52,6 +52,10 @@ static MALLOC_DEFINE(M_RAID, "raid_data", "GEOM_RAID Data"); SYSCTL_DECL(_kern_geom); SYSCTL_NODE(_kern_geom, OID_AUTO, raid, CTLFLAG_RW, 0, "GEOM_RAID stuff"); +int g_raid_enable = 1; +TUNABLE_INT("kern.geom.raid.enable", &g_raid_enable); +SYSCTL_INT(_kern_geom_raid, OID_AUTO, enable, CTLFLAG_RW, + &g_raid_enable, 0, "Enable on-disk metadata taste"); u_int g_raid_aggressive_spare = 0; TUNABLE_INT("kern.geom.raid.aggressive_spare", &g_raid_aggressive_spare); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, aggressive_spare, CTLFLAG_RW, @@ -1922,6 +1926,8 @@ int g_raid_start_volume(struct g_raid_volume *vol) G_RAID_DEBUG1(2, vol->v_softc, "Starting volume %s.", vol->v_name); LIST_FOREACH(class, &g_raid_tr_classes, trc_list) { + if (!class->trc_enable) + continue; G_RAID_DEBUG1(2, vol->v_softc, "Tasting volume %s for %s transformation.", vol->v_name, class->name); @@ -2144,6 +2150,8 @@ g_raid_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) g_topology_assert(); g_trace(G_T_TOPOLOGY, "%s(%s, %s)", __func__, mp->name, pp->name); + if (!g_raid_enable) + return (NULL); G_RAID_DEBUG(2, "Tasting provider %s.", pp->name); gp = g_new_geomf(mp, "raid:taste"); @@ -2156,6 +2164,8 @@ g_raid_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) geom = NULL; LIST_FOREACH(class, &g_raid_md_classes, mdc_list) { + if (!class->mdc_enable) + continue; G_RAID_DEBUG(2, "Tasting provider %s for %s metadata.", pp->name, class->name); obj = (void *)kobj_create((kobj_class_t)class, M_RAID, |