MFC r205074:

Mask disk_idx to avoid panic because of extra bits set.

PR:             kern/102211
Submitted by:   yoichi
This commit is contained in:
Alexander Motin 2010-03-31 07:49:59 +00:00
parent 59c32a3bfe
commit 3015ec2db6

View file

@ -2544,22 +2544,24 @@ ata_raid_intel_read_meta(device_t dev, struct ar_softc **raidp)
/* clear out any old info */
for (disk = 0; disk < raid->total_disks; disk++) {
u_int disk_idx = map->disk_idx[disk] & 0xffff;
raid->disks[disk].dev = NULL;
bcopy(meta->disk[map->disk_idx[disk]].serial,
bcopy(meta->disk[disk_idx].serial,
raid->disks[disk].serial,
sizeof(raid->disks[disk].serial));
raid->disks[disk].sectors =
meta->disk[map->disk_idx[disk]].sectors;
meta->disk[disk_idx].sectors;
raid->disks[disk].flags = 0;
if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_ONLINE)
if (meta->disk[disk_idx].flags & INTEL_F_ONLINE)
raid->disks[disk].flags |= AR_DF_ONLINE;
if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_ASSIGNED)
if (meta->disk[disk_idx].flags & INTEL_F_ASSIGNED)
raid->disks[disk].flags |= AR_DF_ASSIGNED;
if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_SPARE) {
if (meta->disk[disk_idx].flags & INTEL_F_SPARE) {
raid->disks[disk].flags &= ~(AR_DF_ONLINE | AR_DF_ASSIGNED);
raid->disks[disk].flags |= AR_DF_SPARE;
}
if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_DOWN)
if (meta->disk[disk_idx].flags & INTEL_F_DOWN)
raid->disks[disk].flags &= ~AR_DF_ONLINE;
}
}