Lines Matching refs:bio

77 static void end_reshape_write(struct bio *bio);
101 static inline struct r10bio *get_resync_r10bio(struct bio *bio) in get_resync_r10bio() argument
103 return get_resync_pages(bio)->raid_bio; in get_resync_r10bio()
135 struct bio *bio; in r10buf_pool_alloc() local
163 bio = bio_kmalloc(RESYNC_PAGES, gfp_flags); in r10buf_pool_alloc()
164 if (!bio) in r10buf_pool_alloc()
166 bio_init_inline(bio, NULL, RESYNC_PAGES, 0); in r10buf_pool_alloc()
167 r10_bio->devs[j].bio = bio; in r10buf_pool_alloc()
170 bio = bio_kmalloc(RESYNC_PAGES, gfp_flags); in r10buf_pool_alloc()
171 if (!bio) in r10buf_pool_alloc()
173 bio_init_inline(bio, NULL, RESYNC_PAGES, 0); in r10buf_pool_alloc()
174 r10_bio->devs[j].repl_bio = bio; in r10buf_pool_alloc()
181 struct bio *rbio = r10_bio->devs[j].repl_bio; in r10buf_pool_alloc()
188 bio = r10_bio->devs[j].bio; in r10buf_pool_alloc()
200 bio->bi_private = rp; in r10buf_pool_alloc()
216 if (r10_bio->devs[j].bio) in r10buf_pool_alloc()
217 bio_uninit(r10_bio->devs[j].bio); in r10buf_pool_alloc()
218 kfree(r10_bio->devs[j].bio); in r10buf_pool_alloc()
237 struct bio *bio = r10bio->devs[j].bio; in r10buf_pool_free() local
239 if (bio) { in r10buf_pool_free()
240 rp = get_resync_pages(bio); in r10buf_pool_free()
242 bio_uninit(bio); in r10buf_pool_free()
243 kfree(bio); in r10buf_pool_free()
246 bio = r10bio->devs[j].repl_bio; in r10buf_pool_free()
247 if (bio) { in r10buf_pool_free()
248 bio_uninit(bio); in r10buf_pool_free()
249 kfree(bio); in r10buf_pool_free()
264 struct bio **bio = & r10_bio->devs[i].bio; in put_all_bios() local
265 if (!BIO_SPECIAL(*bio)) in put_all_bios()
266 bio_put(*bio); in put_all_bios()
267 *bio = NULL; in put_all_bios()
268 bio = &r10_bio->devs[i].repl_bio; in put_all_bios()
269 if (r10_bio->read_slot < 0 && !BIO_SPECIAL(*bio)) in put_all_bios()
270 bio_put(*bio); in put_all_bios()
271 *bio = NULL; in put_all_bios()
322 struct bio *bio = r10_bio->master_bio; in raid_end_bio_io() local
327 bio->bi_status = BLK_STS_IOERR; in raid_end_bio_io()
328 bio_endio(bio); in raid_end_bio_io()
355 struct bio *bio, int *slotp, int *replp) in find_bio_disk() argument
361 if (r10_bio->devs[slot].bio == bio) in find_bio_disk()
363 if (r10_bio->devs[slot].repl_bio == bio) { in find_bio_disk()
378 static void raid10_end_read_request(struct bio *bio) in raid10_end_read_request() argument
380 int uptodate = !bio->bi_status; in raid10_end_read_request()
381 struct r10bio *r10_bio = bio->bi_private; in raid10_end_read_request()
404 } else if (!raid1_should_handle_error(bio)) { in raid10_end_read_request()
454 static void raid10_end_write_request(struct bio *bio) in raid10_end_write_request() argument
456 struct r10bio *r10_bio = bio->bi_private; in raid10_end_write_request()
462 struct bio *to_put = NULL; in raid10_end_write_request()
463 bool ignore_error = !raid1_should_handle_error(bio) || in raid10_end_write_request()
464 (bio->bi_status && bio_op(bio) == REQ_OP_DISCARD); in raid10_end_write_request()
466 dev = find_bio_disk(conf, r10_bio, bio, &slot, &repl); in raid10_end_write_request()
478 if (bio->bi_status && !ignore_error) { in raid10_end_write_request()
492 (bio->bi_opf & MD_FAILFAST)) { in raid10_end_write_request()
504 r10_bio->devs[slot].bio = NULL; in raid10_end_write_request()
505 to_put = bio; in raid10_end_write_request()
534 bio_put(bio); in raid10_end_write_request()
538 r10_bio->devs[slot].bio = IO_MADE_GOOD; in raid10_end_write_request()
759 if (r10_bio->devs[slot].bio == IO_BLOCKED) in read_balance()
870 struct bio *bio; in flush_pending_writes() local
872 bio = bio_list_get(&conf->pending_bio_list); in flush_pending_writes()
890 while (bio) { /* submit pending writes */ in flush_pending_writes()
891 struct bio *next = bio->bi_next; in flush_pending_writes()
893 raid1_submit_write(bio); in flush_pending_writes()
894 bio = next; in flush_pending_writes()
1089 struct bio *bio; in raid10_unplug() local
1102 bio = bio_list_get(&plug->pending); in raid10_unplug()
1106 while (bio) { /* submit pending writes */ in raid10_unplug()
1107 struct bio *next = bio->bi_next; in raid10_unplug()
1109 raid1_submit_write(bio); in raid10_unplug()
1110 bio = next; in raid10_unplug()
1123 struct bio *bio, sector_t sectors) in regular_request_wait() argument
1126 if (!wait_barrier(conf, bio->bi_opf & REQ_NOWAIT)) { in regular_request_wait()
1127 bio_wouldblock_error(bio); in regular_request_wait()
1131 bio->bi_iter.bi_sector < conf->reshape_progress && in regular_request_wait()
1132 bio->bi_iter.bi_sector + sectors > conf->reshape_progress) { in regular_request_wait()
1134 if (bio->bi_opf & REQ_NOWAIT) { in regular_request_wait()
1135 bio_wouldblock_error(bio); in regular_request_wait()
1140 conf->reshape_progress <= bio->bi_iter.bi_sector || in regular_request_wait()
1141 conf->reshape_progress >= bio->bi_iter.bi_sector + in regular_request_wait()
1148 static void raid10_read_request(struct mddev *mddev, struct bio *bio, in raid10_read_request() argument
1152 struct bio *read_bio; in raid10_read_request()
1186 if (!regular_request_wait(mddev, conf, bio, r10_bio->sectors)) { in raid10_read_request()
1206 if (max_sectors < bio_sectors(bio)) { in raid10_read_request()
1208 bio = bio_submit_split_bioset(bio, max_sectors, in raid10_read_request()
1211 if (!bio) { in raid10_read_request()
1216 r10_bio->master_bio = bio; in raid10_read_request()
1222 md_account_bio(mddev, &bio); in raid10_read_request()
1223 r10_bio->master_bio = bio; in raid10_read_request()
1225 read_bio = bio_alloc_clone(rdev->bdev, bio, gfp, &mddev->bio_set); in raid10_read_request()
1228 r10_bio->devs[slot].bio = read_bio; in raid10_read_request()
1247 struct bio *bio, bool replacement, in raid10_write_one_disk() argument
1254 struct bio *mbio; in raid10_write_one_disk()
1259 mbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO, &mddev->bio_set); in raid10_write_one_disk()
1264 r10_bio->devs[n_copy].bio = mbio; in raid10_write_one_disk()
1344 static void raid10_write_request(struct mddev *mddev, struct bio *bio, in raid10_write_request() argument
1354 bio->bi_iter.bi_sector, in raid10_write_request()
1355 bio_end_sector(bio)))) { in raid10_write_request()
1358 if (bio->bi_opf & REQ_NOWAIT) { in raid10_write_request()
1359 bio_wouldblock_error(bio); in raid10_write_request()
1366 bio->bi_iter.bi_sector, bio_end_sector(bio))) in raid10_write_request()
1374 if (!regular_request_wait(mddev, conf, bio, sectors)) { in raid10_write_request()
1381 ? (bio->bi_iter.bi_sector < conf->reshape_safe && in raid10_write_request()
1382 bio->bi_iter.bi_sector + sectors > conf->reshape_progress) in raid10_write_request()
1383 : (bio->bi_iter.bi_sector + sectors > conf->reshape_safe && in raid10_write_request()
1384 bio->bi_iter.bi_sector < conf->reshape_progress))) { in raid10_write_request()
1390 if (bio->bi_opf & REQ_NOWAIT) { in raid10_write_request()
1392 bio_wouldblock_error(bio); in raid10_write_request()
1431 r10_bio->devs[i].bio = NULL; in raid10_write_request()
1464 if (bio->bi_opf & REQ_ATOMIC) in raid10_write_request()
1473 r10_bio->devs[i].bio = bio; in raid10_write_request()
1477 r10_bio->devs[i].repl_bio = bio; in raid10_write_request()
1485 if (r10_bio->sectors < bio_sectors(bio)) { in raid10_write_request()
1487 bio = bio_submit_split_bioset(bio, r10_bio->sectors, in raid10_write_request()
1490 if (!bio) { in raid10_write_request()
1495 r10_bio->master_bio = bio; in raid10_write_request()
1498 md_account_bio(mddev, &bio); in raid10_write_request()
1499 r10_bio->master_bio = bio; in raid10_write_request()
1503 if (r10_bio->devs[i].bio) in raid10_write_request()
1504 raid10_write_one_disk(mddev, r10_bio, bio, false, i); in raid10_write_request()
1506 raid10_write_one_disk(mddev, r10_bio, bio, true, i); in raid10_write_request()
1516 if (r10_bio->devs[k].bio) { in raid10_write_request()
1518 r10_bio->devs[k].bio = NULL; in raid10_write_request()
1529 static void __make_request(struct mddev *mddev, struct bio *bio, int sectors) in __make_request() argument
1536 r10_bio->master_bio = bio; in __make_request()
1540 r10_bio->sector = bio->bi_iter.bi_sector; in __make_request()
1546 if (bio_data_dir(bio) == READ) in __make_request()
1547 raid10_read_request(mddev, bio, r10_bio, true); in __make_request()
1549 raid10_write_request(mddev, bio, r10_bio); in __make_request()
1574 static void raid10_end_discard_request(struct bio *bio) in raid10_end_discard_request() argument
1576 struct r10bio *r10_bio = bio->bi_private; in raid10_end_discard_request()
1588 dev = find_bio_disk(conf, r10_bio, bio, &slot, &repl); in raid10_end_discard_request()
1602 static int raid10_handle_discard(struct mddev *mddev, struct bio *bio) in raid10_handle_discard() argument
1609 struct bio *split; in raid10_handle_discard()
1626 if (!wait_barrier(conf, bio->bi_opf & REQ_NOWAIT)) { in raid10_handle_discard()
1627 bio_wouldblock_error(bio); in raid10_handle_discard()
1646 bio_start = bio->bi_iter.bi_sector; in raid10_handle_discard()
1647 bio_end = bio_end_sector(bio); in raid10_handle_discard()
1657 if (bio_sectors(bio) < stripe_size*2) in raid10_handle_discard()
1666 split = bio_split(bio, split_size, GFP_NOIO, &conf->bio_split); in raid10_handle_discard()
1668 bio->bi_status = errno_to_blk_status(PTR_ERR(split)); in raid10_handle_discard()
1669 bio_endio(bio); in raid10_handle_discard()
1673 bio_chain(split, bio); in raid10_handle_discard()
1674 trace_block_split(split, bio->bi_iter.bi_sector); in raid10_handle_discard()
1682 split_size = bio_sectors(bio) - remainder; in raid10_handle_discard()
1683 split = bio_split(bio, split_size, GFP_NOIO, &conf->bio_split); in raid10_handle_discard()
1685 bio->bi_status = errno_to_blk_status(PTR_ERR(split)); in raid10_handle_discard()
1686 bio_endio(bio); in raid10_handle_discard()
1690 bio_chain(split, bio); in raid10_handle_discard()
1691 trace_block_split(split, bio->bi_iter.bi_sector); in raid10_handle_discard()
1694 submit_bio_noacct(bio); in raid10_handle_discard()
1695 bio = split; in raid10_handle_discard()
1699 bio_start = bio->bi_iter.bi_sector; in raid10_handle_discard()
1700 bio_end = bio_end_sector(bio); in raid10_handle_discard()
1741 md_account_bio(mddev, &bio); in raid10_handle_discard()
1742 r10_bio->master_bio = bio; in raid10_handle_discard()
1747 r10_bio->master_bio = (struct bio *)first_r10bio; in raid10_handle_discard()
1759 r10_bio->devs[disk].bio = NULL; in raid10_handle_discard()
1770 r10_bio->devs[disk].bio = bio; in raid10_handle_discard()
1774 r10_bio->devs[disk].repl_bio = bio; in raid10_handle_discard()
1782 struct bio *mbio, *rbio = NULL; in raid10_handle_discard()
1816 if (r10_bio->devs[disk].bio) { in raid10_handle_discard()
1818 mbio = bio_alloc_clone(bio->bi_bdev, bio, GFP_NOIO, in raid10_handle_discard()
1822 r10_bio->devs[disk].bio = mbio; in raid10_handle_discard()
1832 rbio = bio_alloc_clone(bio->bi_bdev, bio, GFP_NOIO, in raid10_handle_discard()
1865 static bool raid10_make_request(struct mddev *mddev, struct bio *bio) in raid10_make_request() argument
1870 int sectors = bio_sectors(bio); in raid10_make_request()
1872 if (unlikely(bio->bi_opf & REQ_PREFLUSH) in raid10_make_request()
1873 && md_flush_request(mddev, bio)) in raid10_make_request()
1876 md_write_start(mddev, bio); in raid10_make_request()
1878 if (unlikely(bio_op(bio) == REQ_OP_DISCARD)) in raid10_make_request()
1879 if (!raid10_handle_discard(mddev, bio)) in raid10_make_request()
1886 if (unlikely((bio->bi_iter.bi_sector & chunk_mask) + in raid10_make_request()
1892 (bio->bi_iter.bi_sector & in raid10_make_request()
1894 __make_request(mddev, bio, sectors); in raid10_make_request()
2219 static void __end_sync_read(struct r10bio *r10_bio, struct bio *bio, int d) in __end_sync_read() argument
2223 if (!bio->bi_status) in __end_sync_read()
2245 static void end_sync_read(struct bio *bio) in end_sync_read() argument
2247 struct r10bio *r10_bio = get_resync_r10bio(bio); in end_sync_read()
2249 int d = find_bio_disk(conf, r10_bio, bio, NULL, NULL); in end_sync_read()
2251 __end_sync_read(r10_bio, bio, d); in end_sync_read()
2254 static void end_reshape_read(struct bio *bio) in end_reshape_read() argument
2257 struct r10bio *r10_bio = bio->bi_private; in end_reshape_read()
2259 __end_sync_read(r10_bio, bio, r10_bio->read_slot); in end_reshape_read()
2289 static void end_sync_write(struct bio *bio) in end_sync_write() argument
2291 struct r10bio *r10_bio = get_resync_r10bio(bio); in end_sync_write()
2299 d = find_bio_disk(conf, r10_bio, bio, &slot, &repl); in end_sync_write()
2305 if (bio->bi_status) { in end_sync_write()
2345 struct bio *tbio, *fbio; in sync_request_write()
2353 if (!r10_bio->devs[i].bio->bi_status) in sync_request_write()
2360 fbio = r10_bio->devs[i].bio; in sync_request_write()
2372 tbio = r10_bio->devs[i].bio; in sync_request_write()
2382 if (!r10_bio->devs[i].bio->bi_status) { in sync_request_write()
2442 if (r10_bio->devs[i].bio->bi_end_io != end_sync_write in sync_request_write()
2443 && r10_bio->devs[i].bio != fbio) in sync_request_write()
2477 struct bio *bio = r10_bio->devs[0].bio; in fix_recovery_read_error() local
2483 struct page **pages = get_resync_pages(bio)->pages; in fix_recovery_read_error()
2551 struct bio *wbio = r10_bio->devs[1].bio; in recovery_request_write()
2552 struct bio *wbio2 = r10_bio->devs[1].repl_bio; in recovery_request_write()
2631 r10_bio->devs[slot].bio = IO_BLOCKED; in fix_read_error()
2682 r10_bio->devs[slot].bio in fix_read_error()
2770 struct bio *bio = r10_bio->master_bio; in narrow_write_error() local
2801 struct bio *wbio; in narrow_write_error()
2806 wbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO, in narrow_write_error()
2808 bio_trim(wbio, sector - bio->bi_iter.bi_sector, sectors); in narrow_write_error()
2834 struct bio *bio; in handle_read_error() local
2846 bio = r10_bio->devs[slot].bio; in handle_read_error()
2847 bio_put(bio); in handle_read_error()
2848 r10_bio->devs[slot].bio = NULL; in handle_read_error()
2851 r10_bio->devs[slot].bio = IO_BLOCKED; in handle_read_error()
2885 if (r10_bio->devs[m].bio == NULL || in handle_write_completed()
2886 r10_bio->devs[m].bio->bi_end_io == NULL) in handle_write_completed()
2888 if (!r10_bio->devs[m].bio->bi_status) in handle_write_completed()
2917 struct bio *bio = r10_bio->devs[m].bio; in handle_write_completed() local
2919 if (bio == IO_MADE_GOOD) { in handle_write_completed()
2925 } else if (bio != NULL && bio->bi_status) { in handle_write_completed()
2930 bio = r10_bio->devs[m].repl_bio; in handle_write_completed()
2932 if (rdev && bio == IO_MADE_GOOD) { in handle_write_completed()
3054 struct bio *bio; in raid10_alloc_init_r10buf() local
3065 bio = r10bio->devs[i].bio; in raid10_alloc_init_r10buf()
3066 rp = bio->bi_private; in raid10_alloc_init_r10buf()
3067 bio_reset(bio, NULL, 0); in raid10_alloc_init_r10buf()
3068 bio->bi_private = rp; in raid10_alloc_init_r10buf()
3069 bio = r10bio->devs[i].repl_bio; in raid10_alloc_init_r10buf()
3070 if (bio) { in raid10_alloc_init_r10buf()
3071 rp = bio->bi_private; in raid10_alloc_init_r10buf()
3072 bio_reset(bio, NULL, 0); in raid10_alloc_init_r10buf()
3073 bio->bi_private = rp; in raid10_alloc_init_r10buf()
3153 struct bio *biolist = NULL, *bio; in raid10_sync_request() local
3331 r10_bio->master_bio = (struct bio*)rb2; in raid10_sync_request()
3381 bio = r10_bio->devs[0].bio; in raid10_sync_request()
3382 bio->bi_next = biolist; in raid10_sync_request()
3383 biolist = bio; in raid10_sync_request()
3384 bio->bi_end_io = end_sync_read; in raid10_sync_request()
3385 bio->bi_opf = REQ_OP_READ; in raid10_sync_request()
3387 bio->bi_opf |= MD_FAILFAST; in raid10_sync_request()
3389 bio->bi_iter.bi_sector = from_addr + in raid10_sync_request()
3391 bio_set_dev(bio, rdev->bdev); in raid10_sync_request()
3406 bio = r10_bio->devs[1].bio; in raid10_sync_request()
3407 bio->bi_next = biolist; in raid10_sync_request()
3408 biolist = bio; in raid10_sync_request()
3409 bio->bi_end_io = end_sync_write; in raid10_sync_request()
3410 bio->bi_opf = REQ_OP_WRITE; in raid10_sync_request()
3411 bio->bi_iter.bi_sector = to_addr in raid10_sync_request()
3413 bio_set_dev(bio, mrdev->bdev); in raid10_sync_request()
3416 r10_bio->devs[1].bio->bi_end_io = NULL; in raid10_sync_request()
3419 bio = r10_bio->devs[1].repl_bio; in raid10_sync_request()
3420 if (bio) in raid10_sync_request()
3421 bio->bi_end_io = NULL; in raid10_sync_request()
3428 bio->bi_next = biolist; in raid10_sync_request()
3429 biolist = bio; in raid10_sync_request()
3430 bio->bi_end_io = end_sync_write; in raid10_sync_request()
3431 bio->bi_opf = REQ_OP_WRITE; in raid10_sync_request()
3432 bio->bi_iter.bi_sector = to_addr + in raid10_sync_request()
3434 bio_set_dev(bio, mreplace->bdev); in raid10_sync_request()
3477 if (r10_bio->devs[0].bio->bi_opf & MD_FAILFAST) { in raid10_sync_request()
3491 r10_bio->devs[0].bio->bi_opf in raid10_sync_request()
3554 bio = r10_bio->devs[i].bio; in raid10_sync_request()
3555 bio->bi_status = BLK_STS_IOERR; in raid10_sync_request()
3574 bio->bi_next = biolist; in raid10_sync_request()
3575 biolist = bio; in raid10_sync_request()
3576 bio->bi_end_io = end_sync_read; in raid10_sync_request()
3577 bio->bi_opf = REQ_OP_READ; in raid10_sync_request()
3579 bio->bi_opf |= MD_FAILFAST; in raid10_sync_request()
3580 bio->bi_iter.bi_sector = sector + rdev->data_offset; in raid10_sync_request()
3581 bio_set_dev(bio, rdev->bdev); in raid10_sync_request()
3591 bio = r10_bio->devs[i].repl_bio; in raid10_sync_request()
3592 bio->bi_status = BLK_STS_IOERR; in raid10_sync_request()
3595 bio->bi_next = biolist; in raid10_sync_request()
3596 biolist = bio; in raid10_sync_request()
3597 bio->bi_end_io = end_sync_write; in raid10_sync_request()
3598 bio->bi_opf = REQ_OP_WRITE; in raid10_sync_request()
3600 bio->bi_opf |= MD_FAILFAST; in raid10_sync_request()
3601 bio->bi_iter.bi_sector = sector + rdev->data_offset; in raid10_sync_request()
3602 bio_set_dev(bio, rdev->bdev); in raid10_sync_request()
3609 if (r10_bio->devs[i].bio->bi_end_io) in raid10_sync_request()
3634 for (bio= biolist ; bio ; bio=bio->bi_next) { in raid10_sync_request()
3635 struct resync_pages *rp = get_resync_pages(bio); in raid10_sync_request()
3637 if (WARN_ON(!bio_add_page(bio, page, len, 0))) { in raid10_sync_request()
3638 bio->bi_status = BLK_STS_RESOURCE; in raid10_sync_request()
3639 bio_endio(bio); in raid10_sync_request()
3696 bio = biolist; in raid10_sync_request()
3699 bio->bi_next = NULL; in raid10_sync_request()
3700 r10_bio = get_resync_r10bio(bio); in raid10_sync_request()
3703 if (bio->bi_end_io == end_sync_read) { in raid10_sync_request()
3704 bio->bi_status = 0; in raid10_sync_request()
3705 submit_bio_noacct(bio); in raid10_sync_request()
4608 struct bio *blist; in reshape_request()
4609 struct bio *bio, *read_bio; in reshape_request() local
4769 struct bio *b; in reshape_request()
4777 b = r10_bio->devs[s/2].bio; in reshape_request()
4794 pages = get_resync_pages(r10_bio->devs[0].bio)->pages; in reshape_request()
4800 for (bio = blist; bio ; bio = bio->bi_next) { in reshape_request()
4801 if (WARN_ON(!bio_add_page(bio, page, len, 0))) { in reshape_request()
4802 bio->bi_status = BLK_STS_RESOURCE; in reshape_request()
4803 bio_endio(bio); in reshape_request()
4859 struct bio *b; in reshape_request_write()
4867 b = r10_bio->devs[s/2].bio; in reshape_request_write()
4928 pages = get_resync_pages(r10_bio->devs[0].bio)->pages; in handle_reshape_read_error()
4981 static void end_reshape_write(struct bio *bio) in end_reshape_write() argument
4983 struct r10bio *r10_bio = get_resync_r10bio(bio); in end_reshape_write()
4991 d = find_bio_disk(conf, r10_bio, bio, &slot, &repl); in end_reshape_write()
4995 if (bio->bi_status) { in end_reshape_write()