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:
parent
f7098e14b4
commit
8cc5eb98ad
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user