Fix a stupid logic bug introduced in geom_vinum_drive.c rev 1.18:

When a drive is newly created, it's state is initially set to 'down',
so it won't allow saving the config to it (thus it will never know of
itself being created).  Work around this by adding a new flag, that's
also checked when saving the config to a drive.
This commit is contained in:
Lukas Ertl 2005-08-15 17:07:47 +00:00
parent f7098e14b4
commit 8cc5eb98ad
3 changed files with 9 additions and 1 deletions

View File

@ -312,6 +312,7 @@ gv_create(struct g_geom *gp, struct gctl_req *req)
gv_config_new_drive(d);
d->flags |= GV_DRIVE_NEWBORN;
LIST_INSERT_HEAD(&sc->drives, d, drive);
}
@ -461,6 +462,7 @@ gv_create(struct g_geom *gp, struct gctl_req *req)
g_destroy_consumer(cp);
} else
gv_save_config(NULL, d, sc);
d->flags &= ~GV_DRIVE_NEWBORN;
}
return (0);

View File

@ -113,7 +113,12 @@ gv_save_config(struct g_consumer *cp, struct gv_drive *d, struct gv_softc *sc)
KASSERT(d != NULL, ("gv_save_config: null d"));
KASSERT(sc != NULL, ("gv_save_config: null sc"));
if (d->state != GV_DRIVE_UP)
/*
* We can't save the config on a drive that isn't up, but drives that
* were just created aren't officially up yet, so we check a special
* flag.
*/
if ((d->state != GV_DRIVE_UP) && !(d->flags && GV_DRIVE_NEWBORN))
return;
if (cp == NULL) {

View File

@ -189,6 +189,7 @@ struct gv_drive {
#define GV_DRIVE_THREAD_ACTIVE 0x01 /* Drive has an active worker thread. */
#define GV_DRIVE_THREAD_DIE 0x02 /* Signal the worker thread to die. */
#define GV_DRIVE_THREAD_DEAD 0x04 /* The worker thread has died. */
#define GV_DRIVE_NEWBORN 0x08 /* The drive was just created. */
struct gv_hdr *hdr; /* The drive header. */