Lines Matching refs:bio
895 static void rbio_endio_bio_list(struct bio *cur, blk_status_t status) in rbio_endio_bio_list()
897 struct bio *next; in rbio_endio_bio_list()
914 struct bio *cur = bio_list_get(&rbio->bio_list); in rbio_orig_end_io()
915 struct bio *extra; in rbio_orig_end_io()
1140 struct bio *last = bio_list->tail; in rbio_add_io_sector()
1142 struct bio *bio; in rbio_add_io_sector() local
1194 bio = bio_alloc(stripe->dev->bdev, in rbio_add_io_sector()
1197 bio->bi_iter.bi_sector = disk_start >> SECTOR_SHIFT; in rbio_add_io_sector()
1198 bio->bi_private = rbio; in rbio_add_io_sector()
1200 __bio_add_page(bio, phys_to_page(sector->paddr), sectorsize, in rbio_add_io_sector()
1202 bio_list_add(bio_list, bio); in rbio_add_io_sector()
1206 static void index_one_bio(struct btrfs_raid_bio *rbio, struct bio *bio) in index_one_bio() argument
1210 struct bvec_iter iter = bio->bi_iter; in index_one_bio()
1211 u32 offset = (bio->bi_iter.bi_sector << SECTOR_SHIFT) - in index_one_bio()
1217 struct bio_vec bv = bio_iter_iovec(bio, iter); in index_one_bio()
1221 bio_advance_iter_single(bio, &iter, sectorsize); in index_one_bio()
1236 struct bio *bio; in index_rbio_pages() local
1239 bio_list_for_each(bio, &rbio->bio_list) in index_rbio_pages()
1240 index_one_bio(rbio, bio); in index_rbio_pages()
1245 static void bio_get_trace_info(struct btrfs_raid_bio *rbio, struct bio *bio, in bio_get_trace_info() argument
1254 if (!bio->bi_bdev) in bio_get_trace_info()
1258 if (bio->bi_bdev != bioc->stripes[i].dev->bdev) in bio_get_trace_info()
1262 trace_info->offset = (bio->bi_iter.bi_sector << SECTOR_SHIFT) - in bio_get_trace_info()
1275 struct bio *bio; in bio_list_put() local
1277 while ((bio = bio_list_pop(bio_list))) in bio_list_put()
1278 bio_put(bio); in bio_list_put()
1456 static void set_rbio_range_error(struct btrfs_raid_bio *rbio, struct bio *bio) in set_rbio_range_error() argument
1459 u32 offset = (bio->bi_iter.bi_sector << SECTOR_SHIFT) - in set_rbio_range_error()
1466 bio->bi_iter.bi_size >> fs_info->sectorsize_bits); in set_rbio_range_error()
1474 if (bio->bi_iter.bi_size == 0) { in set_rbio_range_error()
1512 static void set_bio_pages_uptodate(struct btrfs_raid_bio *rbio, struct bio *bio) in set_bio_pages_uptodate() argument
1518 ASSERT(!bio_flagged(bio, BIO_CLONED)); in set_bio_pages_uptodate()
1520 bio_for_each_segment_all(bvec, bio, iter_all) { in set_bio_pages_uptodate()
1533 static int get_bio_sector_nr(struct btrfs_raid_bio *rbio, struct bio *bio) in get_bio_sector_nr() argument
1535 phys_addr_t bvec_paddr = bvec_phys(bio_first_bvec_all(bio)); in get_bio_sector_nr()
1549 static void rbio_update_error_bitmap(struct btrfs_raid_bio *rbio, struct bio *bio) in rbio_update_error_bitmap() argument
1551 int total_sector_nr = get_bio_sector_nr(rbio, bio); in rbio_update_error_bitmap()
1556 bio_for_each_bvec_all(bvec, bio, i) in rbio_update_error_bitmap()
1572 struct bio *bio) in verify_bio_data_sectors() argument
1575 int total_sector_nr = get_bio_sector_nr(rbio, bio); in verify_bio_data_sectors()
1587 bio_for_each_segment_all(bvec, bio, iter_all) { in verify_bio_data_sectors()
1611 static void raid_wait_read_end_io(struct bio *bio) in raid_wait_read_end_io() argument
1613 struct btrfs_raid_bio *rbio = bio->bi_private; in raid_wait_read_end_io()
1615 if (bio->bi_status) { in raid_wait_read_end_io()
1616 rbio_update_error_bitmap(rbio, bio); in raid_wait_read_end_io()
1618 set_bio_pages_uptodate(rbio, bio); in raid_wait_read_end_io()
1619 verify_bio_data_sectors(rbio, bio); in raid_wait_read_end_io()
1622 bio_put(bio); in raid_wait_read_end_io()
1630 struct bio *bio; in submit_read_wait_bio_list() local
1633 while ((bio = bio_list_pop(bio_list))) { in submit_read_wait_bio_list()
1634 bio->bi_end_io = raid_wait_read_end_io; in submit_read_wait_bio_list()
1639 bio_get_trace_info(rbio, bio, &trace_info); in submit_read_wait_bio_list()
1640 trace_raid56_read(rbio, bio, &trace_info); in submit_read_wait_bio_list()
1642 submit_bio(bio); in submit_read_wait_bio_list()
1728 static void rbio_add_bio(struct btrfs_raid_bio *rbio, struct bio *orig_bio) in rbio_add_bio()
1758 void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc) in raid56_parity_write() argument
1767 bio->bi_status = errno_to_blk_status(PTR_ERR(rbio)); in raid56_parity_write()
1768 bio_endio(bio); in raid56_parity_write()
1772 rbio_add_bio(rbio, bio); in raid56_parity_write()
2160 void raid56_parity_recover(struct bio *bio, struct btrfs_io_context *bioc, in raid56_parity_recover() argument
2168 bio->bi_status = errno_to_blk_status(PTR_ERR(rbio)); in raid56_parity_recover()
2169 bio_endio(bio); in raid56_parity_recover()
2174 rbio_add_bio(rbio, bio); in raid56_parity_recover()
2176 set_rbio_range_error(rbio, bio); in raid56_parity_recover()
2291 static void raid_wait_write_end_io(struct bio *bio) in raid_wait_write_end_io() argument
2293 struct btrfs_raid_bio *rbio = bio->bi_private; in raid_wait_write_end_io()
2295 if (bio->bi_status) in raid_wait_write_end_io()
2296 rbio_update_error_bitmap(rbio, bio); in raid_wait_write_end_io()
2297 bio_put(bio); in raid_wait_write_end_io()
2305 struct bio *bio; in submit_write_bios() local
2308 while ((bio = bio_list_pop(bio_list))) { in submit_write_bios()
2309 bio->bi_end_io = raid_wait_write_end_io; in submit_write_bios()
2314 bio_get_trace_info(rbio, bio, &trace_info); in submit_write_bios()
2315 trace_raid56_write(rbio, bio, &trace_info); in submit_write_bios()
2317 submit_bio(bio); in submit_write_bios()
2452 struct btrfs_raid_bio *raid56_parity_alloc_scrub_rbio(struct bio *bio, in raid56_parity_alloc_scrub_rbio() argument
2464 bio_list_add(&rbio->bio_list, bio); in raid56_parity_alloc_scrub_rbio()
2469 ASSERT(!bio->bi_iter.bi_size); in raid56_parity_alloc_scrub_rbio()