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.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index 0eb08a4df759..27e19e2b51d4 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -468,7 +468,7 @@ static inline int is_io_in_chunk_boundary(struct mddev *mddev,
468 } 468 }
469} 469}
470 470
471static int raid0_make_request(struct mddev *mddev, struct bio *bio) 471static void raid0_make_request(struct mddev *mddev, struct bio *bio)
472{ 472{
473 unsigned int chunk_sects; 473 unsigned int chunk_sects;
474 sector_t sector_offset; 474 sector_t sector_offset;
@@ -477,7 +477,7 @@ static int raid0_make_request(struct mddev *mddev, struct bio *bio)
477 477
478 if (unlikely(bio->bi_rw & REQ_FLUSH)) { 478 if (unlikely(bio->bi_rw & REQ_FLUSH)) {
479 md_flush_request(mddev, bio); 479 md_flush_request(mddev, bio);
480 return 0; 480 return;
481 } 481 }
482 482
483 chunk_sects = mddev->chunk_sectors; 483 chunk_sects = mddev->chunk_sectors;
@@ -497,13 +497,10 @@ static int raid0_make_request(struct mddev *mddev, struct bio *bio)
497 else 497 else
498 bp = bio_split(bio, chunk_sects - 498 bp = bio_split(bio, chunk_sects -
499 sector_div(sector, chunk_sects)); 499 sector_div(sector, chunk_sects));
500 if (raid0_make_request(mddev, &bp->bio1)) 500 raid0_make_request(mddev, &bp->bio1);
501 generic_make_request(&bp->bio1); 501 raid0_make_request(mddev, &bp->bio2);
502 if (raid0_make_request(mddev, &bp->bio2))
503 generic_make_request(&bp->bio2);
504
505 bio_pair_release(bp); 502 bio_pair_release(bp);
506 return 0; 503 return;
507 } 504 }
508 505
509 sector_offset = bio->bi_sector; 506 sector_offset = bio->bi_sector;
@@ -513,10 +510,9 @@ static int raid0_make_request(struct mddev *mddev, struct bio *bio)
513 bio->bi_bdev = tmp_dev->bdev; 510 bio->bi_bdev = tmp_dev->bdev;
514 bio->bi_sector = sector_offset + zone->dev_start + 511 bio->bi_sector = sector_offset + zone->dev_start +
515 tmp_dev->data_offset; 512 tmp_dev->data_offset;
516 /* 513
517 * Let the main block layer submit the IO and resolve recursion: 514 generic_make_request(bio);
518 */ 515 return;
519 return 1;
520 516
521bad_map: 517bad_map:
522 printk("md/raid0:%s: make_request bug: can't convert block across chunks" 518 printk("md/raid0:%s: make_request bug: can't convert block across chunks"
@@ -525,7 +521,7 @@ bad_map:
525 (unsigned long long)bio->bi_sector, bio->bi_size >> 10); 521 (unsigned long long)bio->bi_sector, bio->bi_size >> 10);
526 522
527 bio_io_error(bio); 523 bio_io_error(bio);
528 return 0; 524 return;
529} 525}
530 526
531static void raid0_status(struct seq_file *seq, struct mddev *mddev) 527static void raid0_status(struct seq_file *seq, struct mddev *mddev)