diff options
author | NeilBrown <neilb@suse.de> | 2014-11-04 09:35:20 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2014-11-04 09:35:20 +1100 |
commit | 8057db46a15daba1c954352fe19cfa7c9c6a6805 (patch) | |
tree | 57a341b25e3b62e725379102b8078e6c7c499030 /Detail.c | |
parent | 21dc47172d167e98b15d1d86e69f05d8a7abb8ba (diff) | |
download | mdadm-8057db46a15daba1c954352fe19cfa7c9c6a6805.tar.gz |
Detail: fix handling of 'disks' array.
Since the introduction of replacement devices, we reserve
to places in the "disks" array for each raid disk.
That means we should allocate to twice "max_disk" as the array
could have that many raid_disks (though that would limit the
number of replacements).
A couple of other places need to use "max_disks*2" instead of
"max_disks" to co-ordinate with this.
Reported-by: Or Sagi <ors@reduxio.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Detail.c')
-rw-r--r-- | Detail.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -295,8 +295,8 @@ int Detail(char *dev, struct context *c) goto out; } - disks = xmalloc(max_disks * sizeof(mdu_disk_info_t)); - for (d = 0; d < max_disks; d++) { + disks = xmalloc(max_disks * 2 * sizeof(mdu_disk_info_t)); + for (d = 0; d < max_disks * 2; d++) { disks[d].state = (1<<MD_DISK_REMOVED); disks[d].major = disks[d].minor = 0; disks[d].number = disks[d].raid_disk = d; @@ -327,7 +327,7 @@ int Detail(char *dev, struct context *c) else if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks && disks[disk.raid_disk*2+1].state == (1<<MD_DISK_REMOVED)) disks[disk.raid_disk*2+1] = disk; - else if (next < max_disks) + else if (next < max_disks*2) disks[next++] = disk; } @@ -602,7 +602,7 @@ This is pretty boring } free(info); - for (d= 0; d < max_disks; d++) { + for (d= 0; d < max_disks * 2; d++) { char *dv; mdu_disk_info_t disk = disks[d]; |