imsm: allow --examine to succeed with damaged metadata
limp along after seeing mismatched serial numbers Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
5802a8118e
commit
e9d82038f8
|
@ -373,6 +373,9 @@ static void print_imsm_disk(struct imsm_super *mpb, int index)
|
||||||
__u32 s;
|
__u32 s;
|
||||||
__u64 sz;
|
__u64 sz;
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
snprintf(str, MAX_RAID_SERIAL_LEN, "%s", disk->serial);
|
snprintf(str, MAX_RAID_SERIAL_LEN, "%s", disk->serial);
|
||||||
printf(" Disk%02d Serial : %s\n", index, str);
|
printf(" Disk%02d Serial : %s\n", index, str);
|
||||||
|
@ -550,6 +553,11 @@ static void getinfo_super_imsm(struct supertype *st, struct mdinfo *info)
|
||||||
|
|
||||||
if (super->disks) {
|
if (super->disks) {
|
||||||
disk = get_imsm_disk(mpb, super->disks->index);
|
disk = get_imsm_disk(mpb, super->disks->index);
|
||||||
|
if (!disk) {
|
||||||
|
info->disk.number = -1;
|
||||||
|
info->disk.raid_disk = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
info->disk.number = super->disks->index;
|
info->disk.number = super->disks->index;
|
||||||
info->disk.raid_disk = super->disks->index;
|
info->disk.raid_disk = super->disks->index;
|
||||||
info->data_offset = __le32_to_cpu(disk->total_blocks) -
|
info->data_offset = __le32_to_cpu(disk->total_blocks) -
|
||||||
|
@ -747,8 +755,13 @@ load_imsm_disk(int fd, struct intel_super *super, char *devname, int keep_fd)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > mpb->num_disks)
|
if (i > mpb->num_disks - 1) {
|
||||||
return 2;
|
if (devname)
|
||||||
|
fprintf(stderr,
|
||||||
|
Name ": failed to match serial \'%s\' for %s\n",
|
||||||
|
dl->serial, devname);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
dl->index = i;
|
dl->index = i;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue