summaryrefslogtreecommitdiffstats
path: root/sys/geom/vinum
diff options
context:
space:
mode:
authorle <le@FreeBSD.org>2004-06-25 18:04:33 +0000
committerle <le@FreeBSD.org>2004-06-25 18:04:33 +0000
commitd754d951b906e8d0c99ea9917952cdfb8c5c9378 (patch)
tree58b8d1bd65cc44a93c2827fe35cd9a28583260b3 /sys/geom/vinum
parent1317204d7bf9cdcdd06de82024f406400388b2c1 (diff)
downloadFreeBSD-src-d754d951b906e8d0c99ea9917952cdfb8c5c9378.zip
FreeBSD-src-d754d951b906e8d0c99ea9917952cdfb8c5c9378.tar.gz
Mark a plex as 'newborn' when it is created. This is used to indicate
that new RAID5 plexes need to be initialized first.
Diffstat (limited to 'sys/geom/vinum')
-rw-r--r--sys/geom/vinum/geom_vinum.c1
-rw-r--r--sys/geom/vinum/geom_vinum_subr.c4
2 files changed, 4 insertions, 1 deletions
diff --git a/sys/geom/vinum/geom_vinum.c b/sys/geom/vinum/geom_vinum.c
index d4cdbaa..c4e96f4 100644
--- a/sys/geom/vinum/geom_vinum.c
+++ b/sys/geom/vinum/geom_vinum.c
@@ -384,6 +384,7 @@ gv_create(struct g_geom *gp, struct gctl_req *req)
}
p->vinumconf = sc;
+ p->flags |= GV_PLEX_NEWBORN;
LIST_INIT(&p->subdisks);
LIST_INSERT_HEAD(&sc->plexes, p, plex);
}
diff --git a/sys/geom/vinum/geom_vinum_subr.c b/sys/geom/vinum/geom_vinum_subr.c
index c1fe580..d5e1851 100644
--- a/sys/geom/vinum/geom_vinum_subr.c
+++ b/sys/geom/vinum/geom_vinum_subr.c
@@ -421,10 +421,12 @@ gv_update_plex_config(struct gv_plex *p)
if (p->sdcount == 0)
state = GV_PLEX_DOWN;
- else if ((p->flags & GV_PLEX_ADDED) || (p->org == GV_PLEX_RAID5)) {
+ else if ((p->flags & GV_PLEX_ADDED) ||
+ ((p->org == GV_PLEX_RAID5) && (p->flags & GV_PLEX_NEWBORN))) {
LIST_FOREACH(s, &p->subdisks, in_plex)
s->state = GV_SD_STALE;
p->flags &= ~GV_PLEX_ADDED;
+ p->flags &= ~GV_PLEX_NEWBORN;
p->state = GV_PLEX_DOWN;
}
}
OpenPOWER on IntegriCloud