diff options
author | le <le@FreeBSD.org> | 2004-08-19 12:03:27 +0000 |
---|---|---|
committer | le <le@FreeBSD.org> | 2004-08-19 12:03:27 +0000 |
commit | 7f135ded9ac67df62e33fc83837d72cfae3f72f4 (patch) | |
tree | ed1414cbe1e71f1025ce8852961ad052ca5a97ef /sys/geom/vinum/geom_vinum_state.c | |
parent | 9e08178eb7f76d4c0238edff1e39930e0d6ee70e (diff) | |
download | FreeBSD-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.c | 8 |
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; } } |