diff options
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r-- | drivers/md/raid1.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 5c6a03747448..48d553d7989a 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -62,7 +62,8 @@ static int check_and_add_serial(struct md_rdev *rdev, sector_t lo, sector_t hi) unsigned long flags; int ret = 0; struct mddev *mddev = rdev->mddev; - struct serial_in_rdev *serial = rdev->serial; + int idx = sector_to_idx(lo); + struct serial_in_rdev *serial = &rdev->serial[idx]; si = mempool_alloc(mddev->serial_info_pool, GFP_NOIO); @@ -87,7 +88,8 @@ static void remove_serial(struct md_rdev *rdev, sector_t lo, sector_t hi) unsigned long flags; int found = 0; struct mddev *mddev = rdev->mddev; - struct serial_in_rdev *serial = rdev->serial; + int idx = sector_to_idx(lo); + struct serial_in_rdev *serial = &rdev->serial[idx]; spin_lock_irqsave(&serial->serial_lock, flags); for (si = raid1_rb_iter_first(&serial->serial_rb, lo, hi); @@ -1486,7 +1488,8 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio, for (i = 0; i < disks; i++) { struct bio *mbio = NULL; struct md_rdev *rdev = conf->mirrors[i].rdev; - struct serial_in_rdev *serial = rdev->serial; + int idx = sector_to_idx(lo); + struct serial_in_rdev *serial = &rdev->serial[idx]; if (!r1_bio->bios[i]) continue; |