Lines Matching refs:bio

125 static inline struct r1bio *get_resync_r1bio(struct bio *bio)  in get_resync_r1bio()  argument
127 return get_resync_pages(bio)->raid_bio; in get_resync_r1bio()
149 struct bio *bio; in r1buf_pool_alloc() local
167 bio = bio_kmalloc(RESYNC_PAGES, gfp_flags); in r1buf_pool_alloc()
168 if (!bio) in r1buf_pool_alloc()
170 bio_init(bio, NULL, bio->bi_inline_vecs, RESYNC_PAGES, 0); in r1buf_pool_alloc()
171 r1_bio->bios[j] = bio; in r1buf_pool_alloc()
186 bio = r1_bio->bios[j]; in r1buf_pool_alloc()
197 bio->bi_private = rp; in r1buf_pool_alloc()
245 struct bio **bio = r1_bio->bios + i; in put_all_bios() local
246 if (!BIO_SPECIAL(*bio)) in put_all_bios()
247 bio_put(*bio); in put_all_bios()
248 *bio = NULL; in put_all_bios()
267 struct bio *bio = r1_bio->bios[i]; in put_buf() local
268 if (bio->bi_end_io) in put_buf()
301 struct bio *bio = r1_bio->master_bio; in call_bio_endio() local
304 bio->bi_status = BLK_STS_IOERR; in call_bio_endio()
306 bio_endio(bio); in call_bio_endio()
311 struct bio *bio = r1_bio->master_bio; in raid_end_bio_io() local
318 (bio_data_dir(bio) == WRITE) ? "write" : "read", in raid_end_bio_io()
319 (unsigned long long) bio->bi_iter.bi_sector, in raid_end_bio_io()
320 (unsigned long long) bio_end_sector(bio) - 1); in raid_end_bio_io()
347 static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio) in find_bio_disk() argument
354 if (r1_bio->bios[mirror] == bio) in find_bio_disk()
363 static void raid1_end_read_request(struct bio *bio) in raid1_end_read_request() argument
365 int uptodate = !bio->bi_status; in raid1_end_read_request()
366 struct r1bio *r1_bio = bio->bi_private; in raid1_end_read_request()
382 } else if (!raid1_should_handle_error(bio)) { in raid1_end_read_request()
447 static void raid1_end_write_request(struct bio *bio) in raid1_end_write_request() argument
449 struct r1bio *r1_bio = bio->bi_private; in raid1_end_write_request()
452 struct bio *to_put = NULL; in raid1_end_write_request()
453 int mirror = find_bio_disk(r1_bio, bio); in raid1_end_write_request()
457 bool ignore_error = !raid1_should_handle_error(bio) || in raid1_end_write_request()
458 (bio->bi_status && bio_op(bio) == REQ_OP_DISCARD); in raid1_end_write_request()
463 if (bio->bi_status && !ignore_error) { in raid1_end_write_request()
470 (bio->bi_opf & MD_FAILFAST) && in raid1_end_write_request()
485 to_put = bio; in raid1_end_write_request()
499 to_put = bio; in raid1_end_write_request()
537 struct bio *mbio = r1_bio->master_bio; in raid1_end_write_request()
900 static void flush_bio_list(struct r1conf *conf, struct bio *bio) in flush_bio_list() argument
906 while (bio) { /* submit pending writes */ in flush_bio_list()
907 struct bio *next = bio->bi_next; in flush_bio_list()
909 raid1_submit_write(bio); in flush_bio_list()
910 bio = next; in flush_bio_list()
924 struct bio *bio; in flush_pending_writes() local
926 bio = bio_list_get(&conf->pending_bio_list); in flush_pending_writes()
940 flush_bio_list(conf, bio); in flush_pending_writes()
1221 struct bio *bio) in alloc_behind_master_bio() argument
1223 int size = bio->bi_iter.bi_size; in alloc_behind_master_bio()
1226 struct bio *behind_bio = NULL; in alloc_behind_master_bio()
1232 if (!bio_has_data(bio)) { in alloc_behind_master_bio()
1254 bio_copy_data(behind_bio, bio); in alloc_behind_master_bio()
1263 bio->bi_iter.bi_size); in alloc_behind_master_bio()
1274 struct bio *bio; in raid1_unplug() local
1287 bio = bio_list_get(&plug->pending); in raid1_unplug()
1288 flush_bio_list(conf, bio); in raid1_unplug()
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()
1298 r1_bio->sector = bio->bi_iter.bi_sector; in init_r1bio()
1302 alloc_r1bio(struct mddev *mddev, struct bio *bio) in alloc_r1bio() argument
1309 init_r1bio(r1_bio, mddev, bio); in alloc_r1bio()
1313 static void raid1_read_request(struct mddev *mddev, struct bio *bio, in raid1_read_request() argument
1318 struct bio *read_bio; in raid1_read_request()
1334 if (!wait_read_barrier(conf, bio->bi_iter.bi_sector, in raid1_read_request()
1335 bio->bi_opf & REQ_NOWAIT)) { in raid1_read_request()
1336 bio_wouldblock_error(bio); in raid1_read_request()
1341 r1_bio = alloc_r1bio(mddev, bio); in raid1_read_request()
1343 init_r1bio(r1_bio, mddev, bio); in raid1_read_request()
1378 if (max_sectors < bio_sectors(bio)) { in raid1_read_request()
1379 struct bio *split = bio_split(bio, max_sectors, in raid1_read_request()
1386 bio_chain(split, bio); in raid1_read_request()
1387 submit_bio_noacct(bio); in raid1_read_request()
1388 bio = split; in raid1_read_request()
1389 r1_bio->master_bio = bio; in raid1_read_request()
1395 md_account_bio(mddev, &bio); in raid1_read_request()
1396 r1_bio->master_bio = bio; in raid1_read_request()
1398 read_bio = bio_alloc_clone(mirror->rdev->bdev, bio, gfp, in raid1_read_request()
1416 bio->bi_status = errno_to_blk_status(error); in raid1_read_request()
1421 static bool wait_blocked_rdev(struct mddev *mddev, struct bio *bio) in wait_blocked_rdev() argument
1436 rdev_has_badblock(rdev, bio->bi_iter.bi_sector, in wait_blocked_rdev()
1437 bio_sectors(bio)) < 0) in wait_blocked_rdev()
1441 if (bio->bi_opf & REQ_NOWAIT) in wait_blocked_rdev()
1455 static void raid1_write_request(struct mddev *mddev, struct bio *bio, in raid1_write_request() argument
1465 bool is_discard = (bio_op(bio) == REQ_OP_DISCARD); in raid1_write_request()
1469 bio->bi_iter.bi_sector, bio_end_sector(bio))) { in raid1_write_request()
1472 if (bio->bi_opf & REQ_NOWAIT) { in raid1_write_request()
1473 bio_wouldblock_error(bio); in raid1_write_request()
1480 bio->bi_iter.bi_sector, in raid1_write_request()
1481 bio_end_sector(bio))) in raid1_write_request()
1493 if (!wait_barrier(conf, bio->bi_iter.bi_sector, in raid1_write_request()
1494 bio->bi_opf & REQ_NOWAIT)) { in raid1_write_request()
1495 bio_wouldblock_error(bio); in raid1_write_request()
1499 if (!wait_blocked_rdev(mddev, bio)) { in raid1_write_request()
1500 bio_wouldblock_error(bio); in raid1_write_request()
1504 r1_bio = alloc_r1bio(mddev, bio); in raid1_write_request()
1564 if (bio->bi_opf & REQ_ATOMIC) { in raid1_write_request()
1574 r1_bio->bios[i] = bio; in raid1_write_request()
1586 if (max_sectors < bio_sectors(bio)) { in raid1_write_request()
1587 struct bio *split = bio_split(bio, max_sectors, in raid1_write_request()
1594 bio_chain(split, bio); in raid1_write_request()
1595 submit_bio_noacct(bio); in raid1_write_request()
1596 bio = split; in raid1_write_request()
1597 r1_bio->master_bio = bio; in raid1_write_request()
1601 md_account_bio(mddev, &bio); in raid1_write_request()
1602 r1_bio->master_bio = bio; in raid1_write_request()
1609 struct bio *mbio = NULL; in raid1_write_request()
1627 alloc_behind_master_bio(r1_bio, bio); in raid1_write_request()
1643 mbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO, in raid1_write_request()
1686 bio->bi_status = errno_to_blk_status(error); in raid1_write_request()
1691 static bool raid1_make_request(struct mddev *mddev, struct bio *bio) in raid1_make_request() argument
1695 if (unlikely(bio->bi_opf & REQ_PREFLUSH) in raid1_make_request()
1696 && md_flush_request(mddev, bio)) in raid1_make_request()
1707 bio->bi_iter.bi_sector, bio_sectors(bio)); in raid1_make_request()
1709 if (bio_data_dir(bio) == READ) in raid1_make_request()
1710 raid1_read_request(mddev, bio, sectors, NULL); in raid1_make_request()
1712 md_write_start(mddev,bio); in raid1_make_request()
1713 raid1_write_request(mddev, bio, sectors); in raid1_make_request()
2034 static void end_sync_read(struct bio *bio) in end_sync_read() argument
2036 struct r1bio *r1_bio = get_resync_r1bio(bio); in end_sync_read()
2045 if (!bio->bi_status) in end_sync_read()
2082 static void end_sync_write(struct bio *bio) in end_sync_write() argument
2084 int uptodate = !bio->bi_status; in end_sync_write()
2085 struct r1bio *r1_bio = get_resync_r1bio(bio); in end_sync_write()
2088 struct md_rdev *rdev = conf->mirrors[find_bio_disk(r1_bio, bio)].rdev; in end_sync_write()
2140 struct bio *bio = r1_bio->bios[r1_bio->read_disk]; in fix_sync_read_error() local
2141 struct page **pages = get_resync_pages(bio)->pages; in fix_sync_read_error()
2156 bio->bi_end_io = end_sync_write; in fix_sync_read_error()
2194 mdname(mddev), bio->bi_bdev, in fix_sync_read_error()
2247 bio->bi_status = 0; in fix_sync_read_error()
2270 struct bio *b = r1_bio->bios[i]; 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()
2342 struct bio *wbio; in sync_request_write()
2525 struct bio *wbio; in narrow_write_error()
2566 struct bio *bio = r1_bio->bios[m]; in handle_sync_write_finished() local
2567 if (bio->bi_end_io == NULL) in handle_sync_write_finished()
2569 if (!bio->bi_status && in handle_sync_write_finished()
2573 if (bio->bi_status && in handle_sync_write_finished()
2630 struct bio *bio; in handle_read_error() local
2644 bio = r1_bio->bios[r1_bio->read_disk]; in handle_read_error()
2645 bio_put(bio); in handle_read_error()
2662 bio = r1_bio->master_bio; in handle_read_error()
2666 raid1_read_request(mddev, bio, r1_bio->sectors, r1_bio); in handle_read_error()
2755 struct bio *bio; in raid1_alloc_init_r1buf() local
2759 bio = r1bio->bios[i]; in raid1_alloc_init_r1buf()
2760 rps = bio->bi_private; in raid1_alloc_init_r1buf()
2761 bio_reset(bio, NULL, 0); in raid1_alloc_init_r1buf()
2762 bio->bi_private = rps; in raid1_alloc_init_r1buf()
2783 struct bio *bio; in raid1_sync_request() local
2877 bio = r1_bio->bios[i]; in raid1_sync_request()
2885 bio->bi_opf = REQ_OP_WRITE; in raid1_sync_request()
2886 bio->bi_end_io = end_sync_write; in raid1_sync_request()
2912 bio->bi_opf = REQ_OP_READ; in raid1_sync_request()
2913 bio->bi_end_io = end_sync_read; in raid1_sync_request()
2924 bio->bi_opf = REQ_OP_WRITE; in raid1_sync_request()
2925 bio->bi_end_io = end_sync_write; in raid1_sync_request()
2929 if (rdev && bio->bi_end_io) { in raid1_sync_request()
2931 bio->bi_iter.bi_sector = sector_nr + rdev->data_offset; in raid1_sync_request()
2932 bio_set_dev(bio, rdev->bdev); in raid1_sync_request()
2934 bio->bi_opf |= MD_FAILFAST; in raid1_sync_request()
3019 bio = r1_bio->bios[i]; in raid1_sync_request()
3020 rp = get_resync_pages(bio); in raid1_sync_request()
3021 if (bio->bi_end_io) { in raid1_sync_request()
3028 __bio_add_page(bio, page, len, 0); in raid1_sync_request()
3054 bio = r1_bio->bios[i]; in raid1_sync_request()
3055 if (bio->bi_end_io == end_sync_read) { in raid1_sync_request()
3058 bio->bi_opf &= ~MD_FAILFAST; in raid1_sync_request()
3059 submit_bio_noacct(bio); in raid1_sync_request()
3064 bio = r1_bio->bios[r1_bio->read_disk]; in raid1_sync_request()
3066 bio->bi_opf &= ~MD_FAILFAST; in raid1_sync_request()
3067 submit_bio_noacct(bio); in raid1_sync_request()