Don't free ressources that haven't been allocated. This should fix

the "disappearing subdisks" problem when new subdisks can't be created
due to some errors.

This is in fact an ugly hack, but a more elegant solution would probably
require a redesign of vinum in several places.

Approved by: joerg (mentor)
This commit is contained in:
Lukas Ertl 2004-02-08 15:27:58 +00:00
parent 10b1416d2f
commit 60b42b1c00

View File

@ -1232,8 +1232,15 @@ config_subdisk(int update)
PLEX[sd->plexno].name,
sizeof(sd->name));
else { /* no way */
if (sd->state == sd_unallocated) /* haven't finished allocating the sd, */
free_sd(sdno); /* free it to return drive space */
if (sd->state == sd_unallocated) { /* haven't finished allocating the sd, */
if (autosize != 0) { /* but we might have allocated drive space */
vinum_conf.subdisks_used++; /* ugly hack needed for free_sd() */
free_sd(sdno); /* free it to return drive space */
} else { /* just clear it */
bzero(sd, sizeof(struct sd));
sd->state = sd_unallocated;
}
}
throw_rude_remark(EINVAL, "Unnamed sd is not associated with a plex");
}
sprintf(sdsuffix, ".s%d", sdindex); /* form the suffix */