Fix NULL pointer oops

RAID10 is the only raid level that uses the avail char array pointer
during the enough() operation, so it was the only one that saw this.
The code in incremental assumes unconditionally that count_active will
allocate the avail char array, that it might be used by enough, and that
it will need to be freed afterward.  Once you make count_active actually
do that, then the oops goes away.

Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Doug Ledford 2008-10-29 15:05:36 -04:00 committed by NeilBrown
parent d7ee65c960
commit 43aaf431f6
1 changed files with 10 additions and 4 deletions

View File

@ -543,12 +543,18 @@ static int count_active(struct supertype *st, int mdfd, char **availp,
if (ok != 0)
continue;
st->ss->getinfo_super(st, &info);
if (!avail) {
avail = malloc(info.array.raid_disks);
if (!avail) {
fprintf(stderr, Name ": out of memory.\n");
exit(1);
}
memset(avail, 0, info.array.raid_disks);
*availp = avail;
}
if (info.disk.state & (1<<MD_DISK_SYNC))
{
if (avail == NULL) {
avail = malloc(info.array.raid_disks);
memset(avail, 0, info.array.raid_disks);
}
if (cnt == 0) {
cnt++;
max_events = info.events;