aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid0.c')
-rw-r--r--drivers/md/raid0.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index c4d420b7d2f4..e38d1d3226f3 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -501,10 +501,11 @@ static inline int is_io_in_chunk_boundary(struct mddev *mddev,
501 unsigned int chunk_sects, struct bio *bio) 501 unsigned int chunk_sects, struct bio *bio)
502{ 502{
503 if (likely(is_power_of_2(chunk_sects))) { 503 if (likely(is_power_of_2(chunk_sects))) {
504 return chunk_sects >= ((bio->bi_sector & (chunk_sects-1)) 504 return chunk_sects >=
505 ((bio->bi_iter.bi_sector & (chunk_sects-1))
505 + bio_sectors(bio)); 506 + bio_sectors(bio));
506 } else{ 507 } else{
507 sector_t sector = bio->bi_sector; 508 sector_t sector = bio->bi_iter.bi_sector;
508 return chunk_sects >= (sector_div(sector, chunk_sects) 509 return chunk_sects >= (sector_div(sector, chunk_sects)
509 + bio_sectors(bio)); 510 + bio_sectors(bio));
510 } 511 }
@@ -524,7 +525,7 @@ static void raid0_make_request(struct mddev *mddev, struct bio *bio)
524 525
525 chunk_sects = mddev->chunk_sectors; 526 chunk_sects = mddev->chunk_sectors;
526 if (unlikely(!is_io_in_chunk_boundary(mddev, chunk_sects, bio))) { 527 if (unlikely(!is_io_in_chunk_boundary(mddev, chunk_sects, bio))) {
527 sector_t sector = bio->bi_sector; 528 sector_t sector = bio->bi_iter.bi_sector;
528 struct bio_pair *bp; 529 struct bio_pair *bp;
529 /* Sanity check -- queue functions should prevent this happening */ 530 /* Sanity check -- queue functions should prevent this happening */
530 if (bio_segments(bio) > 1) 531 if (bio_segments(bio) > 1)
@@ -544,12 +545,12 @@ static void raid0_make_request(struct mddev *mddev, struct bio *bio)
544 return; 545 return;
545 } 546 }
546 547
547 sector_offset = bio->bi_sector; 548 sector_offset = bio->bi_iter.bi_sector;
548 zone = find_zone(mddev->private, &sector_offset); 549 zone = find_zone(mddev->private, &sector_offset);
549 tmp_dev = map_sector(mddev, zone, bio->bi_sector, 550 tmp_dev = map_sector(mddev, zone, bio->bi_iter.bi_sector,
550 &sector_offset); 551 &sector_offset);
551 bio->bi_bdev = tmp_dev->bdev; 552 bio->bi_bdev = tmp_dev->bdev;
552 bio->bi_sector = sector_offset + zone->dev_start + 553 bio->bi_iter.bi_sector = sector_offset + zone->dev_start +
553 tmp_dev->data_offset; 554 tmp_dev->data_offset;
554 555
555 if (unlikely((bio->bi_rw & REQ_DISCARD) && 556 if (unlikely((bio->bi_rw & REQ_DISCARD) &&
@@ -566,7 +567,8 @@ bad_map:
566 printk("md/raid0:%s: make_request bug: can't convert block across chunks" 567 printk("md/raid0:%s: make_request bug: can't convert block across chunks"
567 " or bigger than %dk %llu %d\n", 568 " or bigger than %dk %llu %d\n",
568 mdname(mddev), chunk_sects / 2, 569 mdname(mddev), chunk_sects / 2,
569 (unsigned long long)bio->bi_sector, bio_sectors(bio) / 2); 570 (unsigned long long)bio->bi_iter.bi_sector,
571 bio_sectors(bio) / 2);
570 572
571 bio_io_error(bio); 573 bio_io_error(bio);
572 return; 574 return;