diff options
-rw-r--r-- | drivers/md/raid1.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 800748d585ca..bb5ec7710c00 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -1862,7 +1862,7 @@ static int process_checks(struct r1bio *r1_bio) | |||
1862 | struct bio *sbio = r1_bio->bios[i]; | 1862 | struct bio *sbio = r1_bio->bios[i]; |
1863 | int size; | 1863 | int size; |
1864 | 1864 | ||
1865 | if (r1_bio->bios[i]->bi_end_io != end_sync_read) | 1865 | if (sbio->bi_end_io != end_sync_read) |
1866 | continue; | 1866 | continue; |
1867 | 1867 | ||
1868 | if (test_bit(BIO_UPTODATE, &sbio->bi_flags)) { | 1868 | if (test_bit(BIO_UPTODATE, &sbio->bi_flags)) { |
@@ -1887,16 +1887,15 @@ static int process_checks(struct r1bio *r1_bio) | |||
1887 | continue; | 1887 | continue; |
1888 | } | 1888 | } |
1889 | /* fixup the bio for reuse */ | 1889 | /* fixup the bio for reuse */ |
1890 | bio_reset(sbio); | ||
1890 | sbio->bi_vcnt = vcnt; | 1891 | sbio->bi_vcnt = vcnt; |
1891 | sbio->bi_size = r1_bio->sectors << 9; | 1892 | sbio->bi_size = r1_bio->sectors << 9; |
1892 | sbio->bi_idx = 0; | ||
1893 | sbio->bi_phys_segments = 0; | ||
1894 | sbio->bi_flags &= ~(BIO_POOL_MASK - 1); | ||
1895 | sbio->bi_flags |= 1 << BIO_UPTODATE; | ||
1896 | sbio->bi_next = NULL; | ||
1897 | sbio->bi_sector = r1_bio->sector + | 1893 | sbio->bi_sector = r1_bio->sector + |
1898 | conf->mirrors[i].rdev->data_offset; | 1894 | conf->mirrors[i].rdev->data_offset; |
1899 | sbio->bi_bdev = conf->mirrors[i].rdev->bdev; | 1895 | sbio->bi_bdev = conf->mirrors[i].rdev->bdev; |
1896 | sbio->bi_end_io = end_sync_read; | ||
1897 | sbio->bi_private = r1_bio; | ||
1898 | |||
1900 | size = sbio->bi_size; | 1899 | size = sbio->bi_size; |
1901 | for (j = 0; j < vcnt ; j++) { | 1900 | for (j = 0; j < vcnt ; j++) { |
1902 | struct bio_vec *bi; | 1901 | struct bio_vec *bi; |
@@ -2439,18 +2438,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp | |||
2439 | for (i = 0; i < conf->raid_disks * 2; i++) { | 2438 | for (i = 0; i < conf->raid_disks * 2; i++) { |
2440 | struct md_rdev *rdev; | 2439 | struct md_rdev *rdev; |
2441 | bio = r1_bio->bios[i]; | 2440 | bio = r1_bio->bios[i]; |
2442 | 2441 | bio_reset(bio); | |
2443 | /* take from bio_init */ | ||
2444 | bio->bi_next = NULL; | ||
2445 | bio->bi_flags &= ~(BIO_POOL_MASK-1); | ||
2446 | bio->bi_flags |= 1 << BIO_UPTODATE; | ||
2447 | bio->bi_rw = READ; | ||
2448 | bio->bi_vcnt = 0; | ||
2449 | bio->bi_idx = 0; | ||
2450 | bio->bi_phys_segments = 0; | ||
2451 | bio->bi_size = 0; | ||
2452 | bio->bi_end_io = NULL; | ||
2453 | bio->bi_private = NULL; | ||
2454 | 2442 | ||
2455 | rdev = rcu_dereference(conf->mirrors[i].rdev); | 2443 | rdev = rcu_dereference(conf->mirrors[i].rdev); |
2456 | if (rdev == NULL || | 2444 | if (rdev == NULL || |