[PATCH] md/raid10: split reshape bios before bitmap accounting
Yu Kuai <[email protected]>
| Newsgroups | gmane.linux.raid,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Yu Kuai <[email protected]> Use the shared mddev_bio_split_at_reshape_offset() helper so RAID10 submits only one-side bios to llbitmap during reshape. Signed-off-by: Yu Kuai <[email protected]> --- drivers/md/raid10.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 40000b867136..cd35d183877c 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1898,10 +1898,16 @@ static bool raid10_make_request(struct mddev *mddev, struct bio *bio) || conf->prev.near_copies < conf->prev.raid_disks))) sectors = chunk_sects - (bio->bi_iter.bi_sector & (chunk_sects - 1)); + + bio = mddev_bio_split_at_reshape_offset(mddev, bio, §ors, + &conf->bio_split); + if (!bio) + return true; + __make_request(mddev, bio, sectors); /* In case raid10d snuck in to freeze_array */ wake_up_barrier(conf); return true; @@ -4273,11 +4279,10 @@ static int raid10_check_reshape(struct mddev *mddev) return -EINVAL; if (mddev->bitmap_id == ID_LLBITMAP && mddev->new_chunk_sectors && mddev->new_chunk_sectors < mddev->chunk_sectors) return -EOPNOTSUPP; - if (setup_geo(&geo, mddev, geo_start) != conf->copies) /* mustn't change number of copies */ return -EINVAL; if (geo.far_copies > 1 && !geo.far_offset) /* Cannot switch to 'far' mode */ -- 2.51.0