summaryrefslogtreecommitdiffstats
path: root/sys/geom/vinum/geom_vinum_state.c
diff options
context:
space:
mode:
authorle <le@FreeBSD.org>2004-08-19 12:03:27 +0000
committerle <le@FreeBSD.org>2004-08-19 12:03:27 +0000
commit7f135ded9ac67df62e33fc83837d72cfae3f72f4 (patch)
treeed1414cbe1e71f1025ce8852961ad052ca5a97ef /sys/geom/vinum/geom_vinum_state.c
parent9e08178eb7f76d4c0238edff1e39930e0d6ee70e (diff)
downloadFreeBSD-src-7f135ded9ac67df62e33fc83837d72cfae3f72f4.zip
FreeBSD-src-7f135ded9ac67df62e33fc83837d72cfae3f72f4.tar.gz
A volume can be up if it has a degraded RAID5 plex.
Diffstat (limited to 'sys/geom/vinum/geom_vinum_state.c')
-rw-r--r--sys/geom/vinum/geom_vinum_state.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/geom/vinum/geom_vinum_state.c b/sys/geom/vinum/geom_vinum_state.c
index ae511e5..0510bc9 100644
--- a/sys/geom/vinum/geom_vinum_state.c
+++ b/sys/geom/vinum/geom_vinum_state.c
@@ -238,12 +238,18 @@ gv_update_vol_state(struct gv_volume *v)
struct gv_plex *p;
KASSERT(v != NULL, ("gv_update_vol_state: NULL v"));
-
+
LIST_FOREACH(p, &v->plexes, in_volume) {
/* One of our plexes is accessible, and so are we. */
if (p->state > GV_PLEX_DEGRADED) {
v->state = GV_VOL_UP;
return;
+
+ /* We can handle a RAID5 plex with one dead subdisk as well. */
+ } else if ((p->org == GV_PLEX_RAID5) &&
+ (p->state == GV_PLEX_DEGRADED)) {
+ v->state = GV_VOL_UP;
+ return;
}
}
OpenPOWER on IntegriCloud