7e22e636df
- Change udev rule to not assemble degraded arrays (#453314) - Fix metadata matching in config file (#466078) - Fix assembly of raid10 devices (#444237) - Fix incremental assembly of partitioned raid devices (#447818)
43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
commit fb26614d7a69d164f9e401f57389a1ca4e84258f
|
|
Author: Doug Ledford <dledford@redhat.com>
|
|
Date: Wed Oct 29 10:50:48 2008 -0400
|
|
|
|
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>
|
|
|
|
diff --git a/Incremental.c b/Incremental.c
|
|
index 0fb9afd..9c6524f 100644
|
|
--- a/Incremental.c
|
|
+++ b/Incremental.c
|
|
@@ -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;
|