diff options
Diffstat (limited to 'sys/dev/ata/ata-raid.c')
-rw-r--r-- | sys/dev/ata/ata-raid.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/sys/dev/ata/ata-raid.c b/sys/dev/ata/ata-raid.c index 2a3f89f..11789bb 100644 --- a/sys/dev/ata/ata-raid.c +++ b/sys/dev/ata/ata-raid.c @@ -388,6 +388,15 @@ arstrategy(struct bio *bp) biodone(bp); return; } + if (bp->bio_cmd == BIO_READ) { + if ((buf1->bp.bio_pblkno < + (rdp->disks[buf1->drive].last_lba - AR_PROXIMITY) || + buf1->bp.bio_pblkno > + (rdp->disks[buf1->drive].last_lba + AR_PROXIMITY) || + !(rdp->disks[buf1->drive].flags & AR_DF_ONLINE)) && + (rdp->disks[buf1->drive+rdp->width].flags & AR_DF_ONLINE)) + buf1->drive = buf1->drive + rdp->width; + } if (bp->bio_cmd == BIO_WRITE) { if (rdp->disks[buf1->drive + rdp->width].flags & AR_DF_ONLINE) { if (rdp->disks[buf1->drive].flags & AR_DF_ONLINE) { @@ -406,15 +415,6 @@ arstrategy(struct bio *bp) buf1->drive = buf1->drive + rdp->width; } } - if (bp->bio_cmd == BIO_READ) { - if ((buf1->bp.bio_pblkno < - (rdp->disks[buf1->drive].last_lba - AR_PROXIMITY) || - buf1->bp.bio_pblkno > - (rdp->disks[buf1->drive].last_lba + AR_PROXIMITY) || - !(rdp->disks[buf1->drive].flags & AR_DF_ONLINE)) && - (rdp->disks[buf1->drive+rdp->width].flags & AR_DF_ONLINE)) - buf1->drive = buf1->drive + rdp->width; - } buf1->bp.bio_dev = AD_SOFTC(rdp->disks[buf1->drive])->dev; buf1->bp.bio_dev->AD_STRATEGY((struct bio *)buf1); rdp->disks[buf1->drive].last_lba = buf1->bp.bio_pblkno + chunk; |