From ae0acb41f1e45d2a3beb2149a1f7c5f3119f5802 Mon Sep 17 00:00:00 2001 From: sos Date: Sun, 10 Apr 2005 21:39:25 +0000 Subject: [PATCH] Fix FreeBSD native SPAN arrays. Prodded by: Ian Dowse --- sys/dev/ata/ata-raid.c | 16 ++++++++-------- 1 file 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;