1. restore_backup() throws core dump during releasing fdlist. Loop for closing handlers checks next_spare variable, but iterates disk_count. 2. fdlist initialization/close is corrected to initialize/close whole allocated array 3. next_spare variable name is replaced by spares Signed-off-by: Adam Kwolek <adam.kwolek@xxxxxxxxx> --- Grow.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Grow.c b/Grow.c index de177d8..ae0d112 100644 --- a/Grow.c +++ b/Grow.c @@ -38,7 +38,7 @@ int restore_backup(struct supertype *st, struct mdinfo *content, int working_disks, - int next_spare, + int spares, char *backup_file, int verbose) { @@ -46,7 +46,7 @@ int restore_backup(struct supertype *st, int *fdlist; struct mdinfo *dev; int err; - int disk_count = next_spare + working_disks; + int disk_count = working_disks + spares; dprintf("Called restore_backup()\n"); fdlist = malloc(sizeof(int) * disk_count); @@ -55,7 +55,7 @@ int restore_backup(struct supertype *st, Name ": cannot allocate memory for disk list\n"); return 1; } - for (i = 0; i < next_spare; i++) + for (i = 0; i < disk_count; i++) fdlist[i] = -1; for (dev = content->devs; dev; dev = dev->next) { char buf[22]; @@ -68,16 +68,16 @@ int restore_backup(struct supertype *st, if (dev->disk.raid_disk >= 0) fdlist[dev->disk.raid_disk] = fd; else - fdlist[next_spare++] = fd; + fdlist[working_disks++] = fd; } if (st->ss->external && st->ss->recover_backup) err = st->ss->recover_backup(st, content); else - err = Grow_restart(st, content, fdlist, next_spare, + err = Grow_restart(st, content, fdlist, working_disks, backup_file, verbose > 0); - while (next_spare > 0) { + while (disk_count > 0) { disk_count--; if (fdlist[disk_count] >= 0) close(fdlist[disk_count]); -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html