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:
Dan Williams 2008-07-24 17:26:23 -07:00
parent 5802a8118e
commit e9d82038f8
1 changed files with 15 additions and 2 deletions

View File

@ -373,6 +373,9 @@ static void print_imsm_disk(struct imsm_super *mpb, int index)
__u32 s;
__u64 sz;
if (index < 0)
return;
printf("\n");
snprintf(str, MAX_RAID_SERIAL_LEN, "%s", disk->serial);
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) {
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.raid_disk = super->disks->index;
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;
}
if (i > mpb->num_disks)
return 2;
if (i > mpb->num_disks - 1) {
if (devname)
fprintf(stderr,
Name ": failed to match serial \'%s\' for %s\n",
dl->serial, devname);
return 0;
}
dl->index = i;