diff options
-rw-r--r-- | drivers/md/raid1.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 8901f0c8c775..d4e8796b4569 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1472,8 +1472,8 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio) !waitqueue_active(&bitmap->behind_wait)) { mbio = bio_clone_bioset_partial(bio, GFP_NOIO, mddev->bio_set, - offset, - max_sectors); + offset << 9, + max_sectors << 9); alloc_behind_pages(mbio, r1_bio); } @@ -1485,8 +1485,15 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio) } if (!mbio) { - mbio = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set); - bio_trim(mbio, offset, max_sectors); + if (r1_bio->behind_bvecs) + mbio = bio_clone_bioset_partial(bio, GFP_NOIO, + mddev->bio_set, + offset << 9, + max_sectors << 9); + else { + mbio = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set); + bio_trim(mbio, offset, max_sectors); + } } if (r1_bio->behind_bvecs) { |