From 60b42b1c00fbddaa19129c62db0eeae967944d11 Mon Sep 17 00:00:00 2001 From: Lukas Ertl Date: Sun, 8 Feb 2004 15:27:58 +0000 Subject: [PATCH] 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) --- sys/dev/vinum/vinumconfig.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sys/dev/vinum/vinumconfig.c b/sys/dev/vinum/vinumconfig.c index f556f77b7dd..e622eb1105e 100644 --- a/sys/dev/vinum/vinumconfig.c +++ b/sys/dev/vinum/vinumconfig.c @@ -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 */