From bd4e9537c8c896ceb7872f1c53ee8e16e85fcd1c Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 11 May 2011 14:54:19 +1000 Subject: [PATCH] --- yaml --- r: 247881 b: refs/heads/master c: a8830bcaf3206f15e29efcd9e04becd96a0722e9 h: refs/heads/master i: 247879: 674ff1a30c7c97b8d76f7a5d67849197baba64c0 v: v3 --- [refs] | 2 +- trunk/drivers/md/raid10.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 90dbb869e73f..fc9bc26d4042 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7c4e06ff2b6a4c09638551dfde76f37f9fca5c0c +refs/heads/master: a8830bcaf3206f15e29efcd9e04becd96a0722e9 diff --git a/trunk/drivers/md/raid10.c b/trunk/drivers/md/raid10.c index 8e4f469a75b0..80cc7e63cdb7 100644 --- a/trunk/drivers/md/raid10.c +++ b/trunk/drivers/md/raid10.c @@ -1650,8 +1650,8 @@ static void raid10d(mddev_t *mddev) } rdev_dec_pending(conf->mirrors[mirror].rdev, mddev); - bio = r10_bio->devs[r10_bio->read_slot].bio; - r10_bio->devs[r10_bio->read_slot].bio = + bio = r10_bio->devs[slot].bio; + r10_bio->devs[slot].bio = mddev->ro ? IO_BLOCKED : NULL; mirror = read_balance(conf, r10_bio); if (mirror == -1) { @@ -1665,6 +1665,7 @@ static void raid10d(mddev_t *mddev) } else { const unsigned long do_sync = (r10_bio->master_bio->bi_rw & REQ_SYNC); bio_put(bio); + slot = r10_bio->read_slot; rdev = conf->mirrors[mirror].rdev; if (printk_ratelimit()) printk(KERN_ERR "md/raid10:%s: %s: redirecting sector %llu to" @@ -1674,8 +1675,8 @@ static void raid10d(mddev_t *mddev) (unsigned long long)r10_bio->sector); bio = bio_clone_mddev(r10_bio->master_bio, GFP_NOIO, mddev); - r10_bio->devs[r10_bio->read_slot].bio = bio; - bio->bi_sector = r10_bio->devs[r10_bio->read_slot].addr + r10_bio->devs[slot].bio = bio; + bio->bi_sector = r10_bio->devs[slot].addr + rdev->data_offset; bio->bi_bdev = rdev->bdev; bio->bi_rw = READ | do_sync;