diff options
Diffstat (limited to 'drivers/md/raid0.c')
| -rw-r--r-- | drivers/md/raid0.c | 22 |
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 | ||
| 471 | static int raid0_make_request(struct mddev *mddev, struct bio *bio) | 471 | static 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 | ||
| 521 | bad_map: | 517 | bad_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 | ||
| 531 | static void raid0_status(struct seq_file *seq, struct mddev *mddev) | 527 | static void raid0_status(struct seq_file *seq, struct mddev *mddev) |
