Single concat or striped plexes don't need no special initialization

if their subdisks are all available, so let them be brought up.
This commit is contained in:
Lukas Ertl 2004-09-18 18:03:20 +00:00
parent 9e16d66689
commit b916fcec4d
2 changed files with 21 additions and 3 deletions

View file

@ -127,6 +127,7 @@ void
gv_start_vol(struct gv_volume *v)
{
struct gv_plex *p;
struct gv_sd *s;
KASSERT(v != NULL, ("gv_start_vol: NULL v"));
@ -145,6 +146,11 @@ gv_start_vol(struct gv_volume *v)
default:
return;
}
} else {
LIST_FOREACH(s, &p->subdisks, in_plex) {
gv_set_sd_state(s, GV_SD_UP,
GV_SETSTATE_CONFIG);
}
}
} else
gv_sync(v);

View file

@ -138,10 +138,22 @@ gv_set_sd_state(struct gv_sd *s, int newstate, int flags)
case GV_SD_STALE:
/*
* A stale subdisk can't be brought up directly, it
* needs to be revived or initialized first.
* A stale subdisk can be brought up only if it's part
* of a concat or striped plex that's the only one in a
* volume, or if the subdisk isn't attached to a plex.
* Otherwise it needs to be revived or initialized
* first.
*/
/* FALLTHROUGH */
p = s->plex_sc;
if (p == NULL)
break;
if ((p->org != GV_PLEX_RAID5) &&
(p->vol_sc->plexcount == 1))
break;
else
return (-1);
default:
return (-1);
}