aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>2005-04-10 21:39:25 +0000
committerSøren Schmidt <sos@FreeBSD.org>2005-04-10 21:39:25 +0000
commitb0e99d441c918adf35cd09bac636289c3240304d (patch)
tree50eca9fbd0681d3ab514e2d5e2562f29290009c2
parent16f571bd184468a3a41c27d5a60b25213a7941d6 (diff)
downloadsrc-b0e99d441c918adf35cd09bac636289c3240304d.tar.gz
src-b0e99d441c918adf35cd09bac636289c3240304d.zip
Fix FreeBSD native SPAN arrays.
Prodded by: Ian Dowse
Notes
Notes: svn path=/head/; revision=144885
-rw-r--r--sys/dev/ata/ata-raid.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/dev/ata/ata-raid.c b/sys/dev/ata/ata-raid.c
index ab9d902d52f3..15db486ca527 100644
--- a/sys/dev/ata/ata-raid.c
+++ b/sys/dev/ata/ata-raid.c
@@ -115,8 +115,10 @@ ata_raid_attach(struct ar_softc *rdp, int update)
ata_raid_config_changed(rdp, update);
/* sanitize arrays total_size % (width * interleave) == 0 */
- rdp->total_sectors = (rdp->total_sectors / (rdp->interleave * rdp->width)) *
- (rdp->interleave * rdp->width);
+ if (rdp->type == AR_T_RAID0 || rdp->type == AR_T_RAID01 ||
+ rdp->type == AR_T_RAID5)
+ rdp->total_sectors = (rdp->total_sectors/(rdp->interleave*rdp->width))*
+ (rdp->interleave * rdp->width);
rdp->disk = disk_alloc();
rdp->disk->d_strategy = ata_raid_strategy;
//rdp->disk->d_dump = ata_raid_dump;
@@ -2368,10 +2370,11 @@ ata_raid_promise_read_meta(device_t dev, struct ar_softc **raidp, int native)
}
}
raid = raidp[array];
- if (raid->format && (raid->format != AR_F_PROMISE_RAID))
+ if (raid->format &&
+ (raid->format != (native ? AR_F_FREEBSD_RAID : AR_F_PROMISE_RAID)))
continue;
- if ((raid->format == AR_F_PROMISE_RAID) &&
+ if ((raid->format == (native ? AR_F_FREEBSD_RAID : AR_F_PROMISE_RAID))&&
!(meta->raid.magic_1 == (raid->magic_1)))
continue;
@@ -2408,10 +2411,7 @@ ata_raid_promise_read_meta(device_t dev, struct ar_softc **raidp, int native)
goto promise_out;
}
raid->magic_1 = meta->raid.magic_1;
- if (native)
- raid->format = AR_F_FREEBSD_RAID;
- else
- raid->format = AR_F_PROMISE_RAID;
+ raid->format = (native ? AR_F_FREEBSD_RAID : AR_F_PROMISE_RAID);
raid->generation = meta->raid.generation;
raid->interleave = 1 << meta->raid.stripe_shift;
raid->width = meta->raid.array_width;