Lines Matching refs:r1_bio

59 static int check_and_add_serial(struct md_rdev *rdev, struct r1bio *r1_bio,  in check_and_add_serial()  argument
64 sector_t lo = r1_bio->sector; in check_and_add_serial()
65 sector_t hi = lo + r1_bio->sectors; in check_and_add_serial()
82 static void wait_for_serialization(struct md_rdev *rdev, struct r1bio *r1_bio) in wait_for_serialization() argument
86 int idx = sector_to_idx(r1_bio->sector); in wait_for_serialization()
93 check_and_add_serial(rdev, r1_bio, si, idx) == 0); in wait_for_serialization()
149 struct r1bio *r1_bio; in r1buf_pool_alloc() local
155 r1_bio = r1bio_pool_alloc(gfp_flags, pi); in r1buf_pool_alloc()
156 if (!r1_bio) in r1buf_pool_alloc()
172 r1_bio->bios[j] = bio; in r1buf_pool_alloc()
187 bio = r1_bio->bios[j]; in r1buf_pool_alloc()
197 rp->raid_bio = r1_bio; in r1buf_pool_alloc()
201 r1_bio->master_bio = NULL; in r1buf_pool_alloc()
203 return r1_bio; in r1buf_pool_alloc()
211 bio_uninit(r1_bio->bios[j]); in r1buf_pool_alloc()
212 kfree(r1_bio->bios[j]); in r1buf_pool_alloc()
217 rbio_pool_free(r1_bio, data); in r1buf_pool_alloc()
241 static void put_all_bios(struct r1conf *conf, struct r1bio *r1_bio) in put_all_bios() argument
246 struct bio **bio = r1_bio->bios + i; in put_all_bios()
253 static void free_r1bio(struct r1bio *r1_bio) in free_r1bio() argument
255 struct r1conf *conf = r1_bio->mddev->private; in free_r1bio()
257 put_all_bios(conf, r1_bio); in free_r1bio()
258 mempool_free(r1_bio, &conf->r1bio_pool); in free_r1bio()
261 static void put_buf(struct r1bio *r1_bio) in put_buf() argument
263 struct r1conf *conf = r1_bio->mddev->private; in put_buf()
264 sector_t sect = r1_bio->sector; in put_buf()
268 struct bio *bio = r1_bio->bios[i]; in put_buf()
270 rdev_dec_pending(conf->mirrors[i].rdev, r1_bio->mddev); in put_buf()
273 mempool_free(r1_bio, &conf->r1buf_pool); in put_buf()
278 static void reschedule_retry(struct r1bio *r1_bio) in reschedule_retry() argument
281 struct mddev *mddev = r1_bio->mddev; in reschedule_retry()
285 idx = sector_to_idx(r1_bio->sector); in reschedule_retry()
287 list_add(&r1_bio->retry_list, &conf->retry_list); in reschedule_retry()
300 static void call_bio_endio(struct r1bio *r1_bio) in call_bio_endio() argument
302 struct bio *bio = r1_bio->master_bio; in call_bio_endio()
304 if (!test_bit(R1BIO_Uptodate, &r1_bio->state)) in call_bio_endio()
310 static void raid_end_bio_io(struct r1bio *r1_bio) in raid_end_bio_io() argument
312 struct bio *bio = r1_bio->master_bio; in raid_end_bio_io()
313 struct r1conf *conf = r1_bio->mddev->private; in raid_end_bio_io()
314 sector_t sector = r1_bio->sector; in raid_end_bio_io()
317 if (!test_and_set_bit(R1BIO_Returned, &r1_bio->state)) { in raid_end_bio_io()
323 call_bio_endio(r1_bio); in raid_end_bio_io()
326 free_r1bio(r1_bio); in raid_end_bio_io()
337 static inline void update_head_pos(int disk, struct r1bio *r1_bio) in update_head_pos() argument
339 struct r1conf *conf = r1_bio->mddev->private; in update_head_pos()
342 r1_bio->sector + (r1_bio->sectors); in update_head_pos()
348 static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio) in find_bio_disk() argument
351 struct r1conf *conf = r1_bio->mddev->private; in find_bio_disk()
355 if (r1_bio->bios[mirror] == bio) in find_bio_disk()
359 update_head_pos(mirror, r1_bio); in find_bio_disk()
367 struct r1bio *r1_bio = bio->bi_private; in raid1_end_read_request() local
368 struct r1conf *conf = r1_bio->mddev->private; in raid1_end_read_request()
369 struct md_rdev *rdev = conf->mirrors[r1_bio->read_disk].rdev; in raid1_end_read_request()
374 update_head_pos(r1_bio->read_disk, r1_bio); in raid1_end_read_request()
377 set_bit(R1BIO_Uptodate, &r1_bio->state); in raid1_end_read_request()
379 test_bit(R1BIO_FailFast, &r1_bio->state)) in raid1_end_read_request()
390 if (r1_bio->mddev->degraded == conf->raid_disks || in raid1_end_read_request()
391 (r1_bio->mddev->degraded == conf->raid_disks-1 && in raid1_end_read_request()
398 raid_end_bio_io(r1_bio); in raid1_end_read_request()
407 (unsigned long long)r1_bio->sector); in raid1_end_read_request()
408 set_bit(R1BIO_ReadError, &r1_bio->state); in raid1_end_read_request()
409 reschedule_retry(r1_bio); in raid1_end_read_request()
414 static void close_write(struct r1bio *r1_bio) in close_write() argument
416 struct mddev *mddev = r1_bio->mddev; in close_write()
419 if (test_bit(R1BIO_BehindIO, &r1_bio->state)) { in close_write()
420 bio_free_pages(r1_bio->behind_master_bio); in close_write()
421 bio_put(r1_bio->behind_master_bio); in close_write()
422 r1_bio->behind_master_bio = NULL; in close_write()
425 if (test_bit(R1BIO_BehindIO, &r1_bio->state)) in close_write()
430 static void r1_bio_write_done(struct r1bio *r1_bio) in r1_bio_write_done() argument
432 if (!atomic_dec_and_test(&r1_bio->remaining)) in r1_bio_write_done()
435 if (test_bit(R1BIO_WriteError, &r1_bio->state)) in r1_bio_write_done()
436 reschedule_retry(r1_bio); in r1_bio_write_done()
438 close_write(r1_bio); in r1_bio_write_done()
439 if (test_bit(R1BIO_MadeGood, &r1_bio->state)) in r1_bio_write_done()
440 reschedule_retry(r1_bio); in r1_bio_write_done()
442 raid_end_bio_io(r1_bio); in r1_bio_write_done()
448 struct r1bio *r1_bio = bio->bi_private; in raid1_end_write_request() local
449 int behind = test_bit(R1BIO_BehindIO, &r1_bio->state); in raid1_end_write_request()
450 struct r1conf *conf = r1_bio->mddev->private; in raid1_end_write_request()
452 int mirror = find_bio_disk(r1_bio, bio); in raid1_end_write_request()
455 sector_t lo = r1_bio->sector; in raid1_end_write_request()
456 sector_t hi = r1_bio->sector + r1_bio->sectors; in raid1_end_write_request()
473 md_error(r1_bio->mddev, rdev); in raid1_end_write_request()
481 set_bit(R1BIO_WriteError, &r1_bio->state); in raid1_end_write_request()
484 r1_bio->bios[mirror] = NULL; in raid1_end_write_request()
498 r1_bio->bios[mirror] = NULL; in raid1_end_write_request()
510 set_bit(R1BIO_Uptodate, &r1_bio->state); in raid1_end_write_request()
513 if (rdev_has_badblock(rdev, r1_bio->sector, r1_bio->sectors) && in raid1_end_write_request()
515 r1_bio->bios[mirror] = IO_MADE_GOOD; in raid1_end_write_request()
516 set_bit(R1BIO_MadeGood, &r1_bio->state); in raid1_end_write_request()
524 atomic_dec(&r1_bio->behind_remaining); in raid1_end_write_request()
533 if (atomic_read(&r1_bio->behind_remaining) >= (atomic_read(&r1_bio->remaining)-1) && in raid1_end_write_request()
534 test_bit(R1BIO_Uptodate, &r1_bio->state)) { in raid1_end_write_request()
536 if (!test_and_set_bit(R1BIO_Returned, &r1_bio->state)) { in raid1_end_write_request()
537 struct bio *mbio = r1_bio->master_bio; in raid1_end_write_request()
542 call_bio_endio(r1_bio); in raid1_end_write_request()
547 if (r1_bio->bios[mirror] == NULL) in raid1_end_write_request()
554 r1_bio_write_done(r1_bio); in raid1_end_write_request()
590 static int choose_first_rdev(struct r1conf *conf, struct r1bio *r1_bio, in choose_first_rdev() argument
593 sector_t this_sector = r1_bio->sector; in choose_first_rdev()
594 int len = r1_bio->sectors; in choose_first_rdev()
601 if (r1_bio->bios[disk] == IO_BLOCKED) in choose_first_rdev()
620 static bool rdev_in_recovery(struct md_rdev *rdev, struct r1bio *r1_bio) in rdev_in_recovery() argument
623 rdev->recovery_offset < r1_bio->sector + r1_bio->sectors; in rdev_in_recovery()
626 static int choose_bb_rdev(struct r1conf *conf, struct r1bio *r1_bio, in choose_bb_rdev() argument
629 sector_t this_sector = r1_bio->sector; in choose_bb_rdev()
639 if (r1_bio->bios[disk] == IO_BLOCKED) in choose_bb_rdev()
644 rdev_in_recovery(rdev, r1_bio) || in choose_bb_rdev()
649 len = r1_bio->sectors; in choose_bb_rdev()
665 static int choose_slow_rdev(struct r1conf *conf, struct r1bio *r1_bio, in choose_slow_rdev() argument
668 sector_t this_sector = r1_bio->sector; in choose_slow_rdev()
678 if (r1_bio->bios[disk] == IO_BLOCKED) in choose_slow_rdev()
684 rdev_in_recovery(rdev, r1_bio)) in choose_slow_rdev()
688 len = r1_bio->sectors; in choose_slow_rdev()
690 if (read_len == r1_bio->sectors) { in choose_slow_rdev()
714 static bool is_sequential(struct r1conf *conf, int disk, struct r1bio *r1_bio) in is_sequential() argument
717 return conf->mirrors[disk].next_seq_sect == r1_bio->sector || in is_sequential()
718 conf->mirrors[disk].head_position == r1_bio->sector; in is_sequential()
739 static bool rdev_readable(struct md_rdev *rdev, struct r1bio *r1_bio) in rdev_readable() argument
744 if (rdev_in_recovery(rdev, r1_bio)) in rdev_readable()
752 if (rdev_has_badblock(rdev, r1_bio->sector, r1_bio->sectors)) in rdev_readable()
767 static int choose_best_rdev(struct r1conf *conf, struct r1bio *r1_bio) in choose_best_rdev() argument
783 if (r1_bio->bios[disk] == IO_BLOCKED) in choose_best_rdev()
787 if (!rdev_readable(rdev, r1_bio)) in choose_best_rdev()
792 set_bit(R1BIO_FailFast, &r1_bio->state); in choose_best_rdev()
795 dist = abs(r1_bio->sector - conf->mirrors[disk].head_position); in choose_best_rdev()
798 if (is_sequential(conf, disk, r1_bio)) { in choose_best_rdev()
863 static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, in read_balance() argument
868 clear_bit(R1BIO_FailFast, &r1_bio->state); in read_balance()
870 if (raid1_should_read_first(conf->mddev, r1_bio->sector, in read_balance()
871 r1_bio->sectors)) in read_balance()
872 return choose_first_rdev(conf, r1_bio, max_sectors); in read_balance()
874 disk = choose_best_rdev(conf, r1_bio); in read_balance()
876 *max_sectors = r1_bio->sectors; in read_balance()
877 update_read_sectors(conf, disk, r1_bio->sector, in read_balance()
878 r1_bio->sectors); in read_balance()
887 disk = choose_bb_rdev(conf, r1_bio, max_sectors); in read_balance()
891 return choose_slow_rdev(conf, r1_bio, max_sectors); in read_balance()
1220 static void alloc_behind_master_bio(struct r1bio *r1_bio, in alloc_behind_master_bio() argument
1229 &r1_bio->mddev->bio_set); in alloc_behind_master_bio()
1256 r1_bio->behind_master_bio = behind_bio; in alloc_behind_master_bio()
1257 set_bit(R1BIO_BehindIO, &r1_bio->state); in alloc_behind_master_bio()
1292 static void init_r1bio(struct r1bio *r1_bio, struct mddev *mddev, struct bio *bio) in init_r1bio() argument
1294 r1_bio->master_bio = bio; in init_r1bio()
1295 r1_bio->sectors = bio_sectors(bio); in init_r1bio()
1296 r1_bio->state = 0; in init_r1bio()
1297 r1_bio->mddev = mddev; in init_r1bio()
1298 r1_bio->sector = bio->bi_iter.bi_sector; in init_r1bio()
1305 struct r1bio *r1_bio; in alloc_r1bio() local
1307 r1_bio = mempool_alloc(&conf->r1bio_pool, GFP_NOIO); in alloc_r1bio()
1309 memset(r1_bio->bios, 0, conf->raid_disks * sizeof(r1_bio->bios[0])); in alloc_r1bio()
1310 init_r1bio(r1_bio, mddev, bio); in alloc_r1bio()
1311 return r1_bio; in alloc_r1bio()
1315 int max_read_sectors, struct r1bio *r1_bio) in raid1_read_request() argument
1322 bool r1bio_existed = !!r1_bio; in raid1_read_request()
1329 gfp_t gfp = r1_bio ? (GFP_NOIO | __GFP_HIGH) : GFP_NOIO; in raid1_read_request()
1341 if (!r1_bio) in raid1_read_request()
1342 r1_bio = alloc_r1bio(mddev, bio); in raid1_read_request()
1344 init_r1bio(r1_bio, mddev, bio); in raid1_read_request()
1345 r1_bio->sectors = max_read_sectors; in raid1_read_request()
1351 rdisk = read_balance(conf, r1_bio, &max_sectors); in raid1_read_request()
1357 conf->mirrors[r1_bio->read_disk].rdev->bdev, in raid1_read_request()
1358 r1_bio->sector); in raid1_read_request()
1359 raid_end_bio_io(r1_bio); in raid1_read_request()
1367 (unsigned long long)r1_bio->sector, in raid1_read_request()
1390 r1_bio->master_bio = bio; in raid1_read_request()
1391 r1_bio->sectors = max_sectors; in raid1_read_request()
1394 r1_bio->read_disk = rdisk; in raid1_read_request()
1397 r1_bio->master_bio = bio; in raid1_read_request()
1402 r1_bio->bios[rdisk] = read_bio; in raid1_read_request()
1404 read_bio->bi_iter.bi_sector = r1_bio->sector + in raid1_read_request()
1408 test_bit(R1BIO_FailFast, &r1_bio->state)) in raid1_read_request()
1410 read_bio->bi_private = r1_bio; in raid1_read_request()
1411 mddev_trace_remap(mddev, read_bio, r1_bio->sector); in raid1_read_request()
1418 set_bit(R1BIO_Uptodate, &r1_bio->state); in raid1_read_request()
1419 raid_end_bio_io(r1_bio); in raid1_read_request()
1460 struct r1bio *r1_bio; in raid1_write_request() local
1505 r1_bio = alloc_r1bio(mddev, bio); in raid1_write_request()
1506 r1_bio->sectors = max_write_sectors; in raid1_write_request()
1520 max_sectors = r1_bio->sectors; in raid1_write_request()
1532 r1_bio->bios[i] = NULL; in raid1_write_request()
1542 is_bad = is_badblock(rdev, r1_bio->sector, max_sectors, in raid1_write_request()
1544 if (is_bad && first_bad <= r1_bio->sector) { in raid1_write_request()
1546 bad_sectors -= (r1_bio->sector - first_bad); in raid1_write_request()
1570 good_sectors = first_bad - r1_bio->sector; in raid1_write_request()
1575 r1_bio->bios[i] = bio; in raid1_write_request()
1598 r1_bio->master_bio = bio; in raid1_write_request()
1599 r1_bio->sectors = max_sectors; in raid1_write_request()
1603 r1_bio->master_bio = bio; in raid1_write_request()
1604 atomic_set(&r1_bio->remaining, 1); in raid1_write_request()
1605 atomic_set(&r1_bio->behind_remaining, 0); in raid1_write_request()
1612 if (!r1_bio->bios[i]) in raid1_write_request()
1628 alloc_behind_master_bio(r1_bio, bio); in raid1_write_request()
1630 if (test_bit(R1BIO_BehindIO, &r1_bio->state)) in raid1_write_request()
1635 if (r1_bio->behind_master_bio) { in raid1_write_request()
1637 r1_bio->behind_master_bio, in raid1_write_request()
1640 wait_for_serialization(rdev, r1_bio); in raid1_write_request()
1642 atomic_inc(&r1_bio->behind_remaining); in raid1_write_request()
1648 wait_for_serialization(rdev, r1_bio); in raid1_write_request()
1651 r1_bio->bios[i] = mbio; in raid1_write_request()
1653 mbio->bi_iter.bi_sector = (r1_bio->sector + rdev->data_offset); in raid1_write_request()
1659 mbio->bi_private = r1_bio; in raid1_write_request()
1661 atomic_inc(&r1_bio->remaining); in raid1_write_request()
1662 mddev_trace_remap(mddev, mbio, r1_bio->sector); in raid1_write_request()
1673 r1_bio_write_done(r1_bio); in raid1_write_request()
1680 if (r1_bio->bios[k]) { in raid1_write_request()
1682 r1_bio->bios[k] = NULL; in raid1_write_request()
1687 set_bit(R1BIO_Uptodate, &r1_bio->state); in raid1_write_request()
1688 raid_end_bio_io(r1_bio); in raid1_write_request()
2036 struct r1bio *r1_bio = get_resync_r1bio(bio); in end_sync_read() local
2038 update_head_pos(r1_bio->read_disk, r1_bio); in end_sync_read()
2046 set_bit(R1BIO_Uptodate, &r1_bio->state); in end_sync_read()
2048 if (atomic_dec_and_test(&r1_bio->remaining)) in end_sync_read()
2049 reschedule_retry(r1_bio); in end_sync_read()
2052 static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio) in abort_sync_write() argument
2055 sector_t s = r1_bio->sector; in abort_sync_write()
2056 long sectors_to_go = r1_bio->sectors; in abort_sync_write()
2066 static void put_sync_write_buf(struct r1bio *r1_bio, int uptodate) in put_sync_write_buf() argument
2068 if (atomic_dec_and_test(&r1_bio->remaining)) { in put_sync_write_buf()
2069 struct mddev *mddev = r1_bio->mddev; in put_sync_write_buf()
2070 int s = r1_bio->sectors; in put_sync_write_buf()
2072 if (test_bit(R1BIO_MadeGood, &r1_bio->state) || in put_sync_write_buf()
2073 test_bit(R1BIO_WriteError, &r1_bio->state)) in put_sync_write_buf()
2074 reschedule_retry(r1_bio); in put_sync_write_buf()
2076 put_buf(r1_bio); in put_sync_write_buf()
2085 struct r1bio *r1_bio = get_resync_r1bio(bio); in end_sync_write() local
2086 struct mddev *mddev = r1_bio->mddev; in end_sync_write()
2088 struct md_rdev *rdev = conf->mirrors[find_bio_disk(r1_bio, bio)].rdev; in end_sync_write()
2091 abort_sync_write(mddev, r1_bio); in end_sync_write()
2096 set_bit(R1BIO_WriteError, &r1_bio->state); in end_sync_write()
2097 } else if (rdev_has_badblock(rdev, r1_bio->sector, r1_bio->sectors) && in end_sync_write()
2098 !rdev_has_badblock(conf->mirrors[r1_bio->read_disk].rdev, in end_sync_write()
2099 r1_bio->sector, r1_bio->sectors)) { in end_sync_write()
2100 set_bit(R1BIO_MadeGood, &r1_bio->state); in end_sync_write()
2103 put_sync_write_buf(r1_bio, uptodate); in end_sync_write()
2125 static int fix_sync_read_error(struct r1bio *r1_bio) in fix_sync_read_error() argument
2138 struct mddev *mddev = r1_bio->mddev; in fix_sync_read_error()
2140 struct bio *bio = r1_bio->bios[r1_bio->read_disk]; in fix_sync_read_error()
2142 sector_t sect = r1_bio->sector; in fix_sync_read_error()
2143 int sectors = r1_bio->sectors; in fix_sync_read_error()
2147 rdev = conf->mirrors[r1_bio->read_disk].rdev; in fix_sync_read_error()
2161 int d = r1_bio->read_disk; in fix_sync_read_error()
2168 if (r1_bio->bios[d]->bi_end_io == end_sync_read) { in fix_sync_read_error()
2184 } while (!success && d != r1_bio->read_disk); in fix_sync_read_error()
2195 (unsigned long long)r1_bio->sector); in fix_sync_read_error()
2215 while (d != r1_bio->read_disk) { in fix_sync_read_error()
2219 if (r1_bio->bios[d]->bi_end_io != end_sync_read) in fix_sync_read_error()
2225 r1_bio->bios[d]->bi_end_io = NULL; in fix_sync_read_error()
2230 while (d != r1_bio->read_disk) { in fix_sync_read_error()
2234 if (r1_bio->bios[d]->bi_end_io != end_sync_read) in fix_sync_read_error()
2246 set_bit(R1BIO_Uptodate, &r1_bio->state); in fix_sync_read_error()
2251 static void process_checks(struct r1bio *r1_bio) in process_checks() argument
2260 struct mddev *mddev = r1_bio->mddev; in process_checks()
2267 vcnt = (r1_bio->sectors + PAGE_SIZE / 512 - 1) >> (PAGE_SHIFT - 9); in process_checks()
2270 struct bio *b = r1_bio->bios[i]; in process_checks()
2278 b->bi_iter.bi_sector = r1_bio->sector + in process_checks()
2281 rp->raid_bio = r1_bio; in process_checks()
2285 md_bio_reset_resync_pages(b, rp, r1_bio->sectors << 9); in process_checks()
2288 if (r1_bio->bios[primary]->bi_end_io == end_sync_read && in process_checks()
2289 !r1_bio->bios[primary]->bi_status) { in process_checks()
2290 r1_bio->bios[primary]->bi_end_io = NULL; in process_checks()
2294 r1_bio->read_disk = primary; in process_checks()
2297 struct bio *pbio = r1_bio->bios[primary]; in process_checks()
2298 struct bio *sbio = r1_bio->bios[i]; in process_checks()
2324 atomic64_add(r1_bio->sectors, &mddev->resync_mismatches); in process_checks()
2337 static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio) in sync_request_write() argument
2344 if (!test_bit(R1BIO_Uptodate, &r1_bio->state)) { in sync_request_write()
2351 !fix_sync_read_error(r1_bio)) { in sync_request_write()
2354 md_done_sync(mddev, r1_bio->sectors, 0); in sync_request_write()
2355 put_buf(r1_bio); in sync_request_write()
2361 process_checks(r1_bio); in sync_request_write()
2366 atomic_set(&r1_bio->remaining, 1); in sync_request_write()
2368 wbio = r1_bio->bios[i]; in sync_request_write()
2371 (i == r1_bio->read_disk || in sync_request_write()
2375 abort_sync_write(mddev, r1_bio); in sync_request_write()
2384 atomic_inc(&r1_bio->remaining); in sync_request_write()
2390 put_sync_write_buf(r1_bio, 1); in sync_request_write()
2401 static void fix_read_error(struct r1conf *conf, struct r1bio *r1_bio) in fix_read_error() argument
2403 sector_t sect = r1_bio->sector; in fix_read_error()
2404 int sectors = r1_bio->sectors; in fix_read_error()
2405 int read_disk = r1_bio->read_disk; in fix_read_error()
2410 r1_bio->bios[r1_bio->read_disk] = IO_BLOCKED; in fix_read_error()
2492 static bool narrow_write_error(struct r1bio *r1_bio, int i) in narrow_write_error() argument
2494 struct mddev *mddev = r1_bio->mddev; in narrow_write_error()
2512 int sect_to_write = r1_bio->sectors; in narrow_write_error()
2520 sector = r1_bio->sector; in narrow_write_error()
2531 if (test_bit(R1BIO_BehindIO, &r1_bio->state)) { in narrow_write_error()
2533 r1_bio->behind_master_bio, in narrow_write_error()
2536 wbio = bio_alloc_clone(rdev->bdev, r1_bio->master_bio, in narrow_write_error()
2541 wbio->bi_iter.bi_sector = r1_bio->sector; in narrow_write_error()
2542 wbio->bi_iter.bi_size = r1_bio->sectors << 9; in narrow_write_error()
2544 bio_trim(wbio, sector - r1_bio->sector, sectors); in narrow_write_error()
2561 static void handle_sync_write_finished(struct r1conf *conf, struct r1bio *r1_bio) in handle_sync_write_finished() argument
2564 int s = r1_bio->sectors; in handle_sync_write_finished()
2567 struct bio *bio = r1_bio->bios[m]; in handle_sync_write_finished()
2571 test_bit(R1BIO_MadeGood, &r1_bio->state)) { in handle_sync_write_finished()
2572 rdev_clear_badblocks(rdev, r1_bio->sector, s, 0); in handle_sync_write_finished()
2575 test_bit(R1BIO_WriteError, &r1_bio->state)) { in handle_sync_write_finished()
2576 if (!rdev_set_badblocks(rdev, r1_bio->sector, s, 0)) in handle_sync_write_finished()
2580 put_buf(r1_bio); in handle_sync_write_finished()
2584 static void handle_write_finished(struct r1conf *conf, struct r1bio *r1_bio) in handle_write_finished() argument
2590 if (r1_bio->bios[m] == IO_MADE_GOOD) { in handle_write_finished()
2593 r1_bio->sector, in handle_write_finished()
2594 r1_bio->sectors, 0); in handle_write_finished()
2596 } else if (r1_bio->bios[m] != NULL) { in handle_write_finished()
2602 if (!narrow_write_error(r1_bio, m)) in handle_write_finished()
2611 list_add(&r1_bio->retry_list, &conf->bio_end_io_list); in handle_write_finished()
2612 idx = sector_to_idx(r1_bio->sector); in handle_write_finished()
2622 if (test_bit(R1BIO_WriteError, &r1_bio->state)) in handle_write_finished()
2623 close_write(r1_bio); in handle_write_finished()
2624 raid_end_bio_io(r1_bio); in handle_write_finished()
2628 static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio) in handle_read_error() argument
2635 clear_bit(R1BIO_ReadError, &r1_bio->state); in handle_read_error()
2645 bio = r1_bio->bios[r1_bio->read_disk]; in handle_read_error()
2647 r1_bio->bios[r1_bio->read_disk] = NULL; in handle_read_error()
2649 rdev = conf->mirrors[r1_bio->read_disk].rdev; in handle_read_error()
2653 fix_read_error(conf, r1_bio); in handle_read_error()
2658 r1_bio->bios[r1_bio->read_disk] = IO_BLOCKED; in handle_read_error()
2662 sector = r1_bio->sector; in handle_read_error()
2663 bio = r1_bio->master_bio; in handle_read_error()
2666 r1_bio->state = 0; in handle_read_error()
2667 raid1_read_request(mddev, bio, r1_bio->sectors, r1_bio); in handle_read_error()
2674 struct r1bio *r1_bio; in raid1d() local
2691 r1_bio = list_first_entry(&tmp, struct r1bio, in raid1d()
2693 list_del(&r1_bio->retry_list); in raid1d()
2694 idx = sector_to_idx(r1_bio->sector); in raid1d()
2696 if (test_bit(R1BIO_WriteError, &r1_bio->state)) in raid1d()
2697 close_write(r1_bio); in raid1d()
2698 raid_end_bio_io(r1_bio); in raid1d()
2712 r1_bio = list_entry(head->prev, struct r1bio, retry_list); in raid1d()
2714 idx = sector_to_idx(r1_bio->sector); in raid1d()
2718 mddev = r1_bio->mddev; in raid1d()
2720 if (test_bit(R1BIO_IsSync, &r1_bio->state)) { in raid1d()
2721 if (test_bit(R1BIO_MadeGood, &r1_bio->state) || in raid1d()
2722 test_bit(R1BIO_WriteError, &r1_bio->state)) in raid1d()
2723 handle_sync_write_finished(conf, r1_bio); in raid1d()
2725 sync_request_write(mddev, r1_bio); in raid1d()
2726 } else if (test_bit(R1BIO_MadeGood, &r1_bio->state) || in raid1d()
2727 test_bit(R1BIO_WriteError, &r1_bio->state)) in raid1d()
2728 handle_write_finished(conf, r1_bio); in raid1d()
2729 else if (test_bit(R1BIO_ReadError, &r1_bio->state)) in raid1d()
2730 handle_read_error(conf, r1_bio); in raid1d()
2783 struct r1bio *r1_bio; in raid1_sync_request() local
2858 r1_bio = raid1_alloc_init_r1buf(conf); in raid1_sync_request()
2869 r1_bio->mddev = mddev; in raid1_sync_request()
2870 r1_bio->sector = sector_nr; in raid1_sync_request()
2871 r1_bio->state = 0; in raid1_sync_request()
2872 set_bit(R1BIO_IsSync, &r1_bio->state); in raid1_sync_request()
2878 bio = r1_bio->bios[i]; in raid1_sync_request()
2940 r1_bio->read_disk = disk; in raid1_sync_request()
2948 if (r1_bio->bios[i]->bi_end_io == end_sync_write) { in raid1_sync_request()
2956 put_buf(r1_bio); in raid1_sync_request()
2990 put_buf(r1_bio); in raid1_sync_request()
3020 bio = r1_bio->bios[i]; in raid1_sync_request()
3037 r1_bio->sectors = nr_sectors; in raid1_sync_request()
3053 atomic_set(&r1_bio->remaining, read_targets); in raid1_sync_request()
3055 bio = r1_bio->bios[i]; in raid1_sync_request()
3065 atomic_set(&r1_bio->remaining, 1); in raid1_sync_request()
3066 bio = r1_bio->bios[r1_bio->read_disk]; in raid1_sync_request()