summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid1.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2012-07-03 15:58:42 +1000
committerNeilBrown <neilb@suse.de>2012-07-03 15:58:42 +1000
commit32644afd8975d19174bcb9ba34687c32dd810a09 (patch)
tree10c55615d0edcb34af0dd2b9d1cdf09cbf34b45d /drivers/md/raid1.c
parentfab363b5ff502d1b39ddcfec04271f5858d9f26e (diff)
downloadlinux-32644afd8975d19174bcb9ba34687c32dd810a09.tar.gz
linux-32644afd8975d19174bcb9ba34687c32dd810a09.tar.bz2
linux-32644afd8975d19174bcb9ba34687c32dd810a09.zip
md/raid1: fix bug in read_balance introduced by hot-replace
When we added hot_replace we doubled the number of devices that could be in a RAID1 array. So we doubled how far read_balance would search. Unfortunately we didn't double the point at which it looped back to the beginning - so it effectively loops over all non-replacement disks twice. This doesn't cause bad behaviour, but it pointless and means we never read from replacement devices. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r--drivers/md/raid1.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 39b2a8aa3b23..34b4665cb0b6 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -517,8 +517,8 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
int bad_sectors;
int disk = start_disk + i;
- if (disk >= conf->raid_disks)
- disk -= conf->raid_disks;
+ if (disk >= conf->raid_disks * 2)
+ disk -= conf->raid_disks * 2;
rdev = rcu_dereference(conf->mirrors[disk].rdev);
if (r1_bio->bios[disk] == IO_BLOCKED