Lines Matching defs:bbio
891 static void scrub_repair_read_endio(struct btrfs_bio *bbio)
893 struct scrub_stripe *stripe = bbio->private;
895 int sector_nr = calc_sector_number(stripe, bio_first_bvec_all(&bbio->bio));
896 const u32 bio_size = bio_get_size(&bbio->bio);
900 if (bbio->bio.bi_status) {
909 bio_put(&bbio->bio);
920 static void scrub_bio_add_sector(struct btrfs_bio *bbio, struct scrub_stripe *stripe,
923 struct btrfs_fs_info *fs_info = bbio->inode->root->fs_info;
927 ret = bio_add_page(&bbio->bio, virt_to_page(kaddr), fs_info->sectorsize,
930 * Caller should ensure the bbio has enough size.
945 struct btrfs_bio *bbio;
947 bbio = btrfs_bio_alloc(nr_vecs, opf, BTRFS_I(fs_info->btree_inode),
949 bbio->is_scrub = true;
950 bbio->bio.bi_iter.bi_sector = logical >> SECTOR_SHIFT;
951 return bbio;
958 struct btrfs_bio *bbio = NULL;
968 if (bbio && ((i > 0 && !test_bit(i - 1, &old_error_bitmap)) ||
969 bbio->bio.bi_iter.bi_size >= blocksize)) {
970 ASSERT(bbio->bio.bi_iter.bi_size);
972 btrfs_submit_bbio(bbio, mirror);
975 bbio = NULL;
978 if (!bbio)
979 bbio = alloc_scrub_bbio(fs_info, stripe->nr_sectors, REQ_OP_READ,
983 scrub_bio_add_sector(bbio, stripe, i);
985 if (bbio) {
986 ASSERT(bbio->bio.bi_iter.bi_size);
988 btrfs_submit_bbio(bbio, mirror);
1245 static void scrub_read_endio(struct btrfs_bio *bbio)
1247 struct scrub_stripe *stripe = bbio->private;
1248 int sector_nr = calc_sector_number(stripe, bio_first_bvec_all(&bbio->bio));
1250 const u32 bio_size = bio_get_size(&bbio->bio);
1255 if (bbio->bio.bi_status) {
1261 bio_put(&bbio->bio);
1269 static void scrub_write_endio(struct btrfs_bio *bbio)
1271 struct scrub_stripe *stripe = bbio->private;
1273 int sector_nr = calc_sector_number(stripe, bio_first_bvec_all(&bbio->bio));
1274 const u32 bio_size = bio_get_size(&bbio->bio);
1276 if (bbio->bio.bi_status) {
1287 bio_put(&bbio->bio);
1295 struct btrfs_bio *bbio, bool dev_replace)
1298 u32 bio_len = bbio->bio.bi_iter.bi_size;
1299 u32 bio_off = (bbio->bio.bi_iter.bi_sector << SECTOR_SHIFT) -
1304 btrfs_submit_repair_write(bbio, stripe->mirror_num, dev_replace);
1339 struct btrfs_bio *bbio = NULL;
1347 if (bbio && sector_nr && !test_bit(sector_nr - 1, &write_bitmap)) {
1348 scrub_submit_write_bio(sctx, stripe, bbio, dev_replace);
1349 bbio = NULL;
1351 if (!bbio)
1352 bbio = alloc_scrub_bbio(fs_info, stripe->nr_sectors, REQ_OP_WRITE,
1355 scrub_bio_add_sector(bbio, stripe, sector_nr);
1357 if (bbio)
1358 scrub_submit_write_bio(sctx, stripe, bbio, dev_replace);
1791 struct btrfs_bio *bbio = NULL;
1806 if (bbio &&
1808 bbio->bio.bi_iter.bi_size >= stripe_len)) {
1809 ASSERT(bbio->bio.bi_iter.bi_size);
1811 btrfs_submit_bbio(bbio, mirror);
1812 bbio = NULL;
1815 if (!bbio) {
1825 * For RST cases, we need to manually split the bbio to
1847 bbio = alloc_scrub_bbio(fs_info, stripe->nr_sectors, REQ_OP_READ,
1851 scrub_bio_add_sector(bbio, stripe, i);
1854 if (bbio) {
1855 ASSERT(bbio->bio.bi_iter.bi_size);
1857 btrfs_submit_bbio(bbio, mirror);
1871 struct btrfs_bio *bbio;
1885 bbio = alloc_scrub_bbio(fs_info, BTRFS_STRIPE_LEN >> min_folio_shift, REQ_OP_READ,
1889 scrub_bio_add_sector(bbio, stripe, cur);
1905 btrfs_submit_bbio(bbio, mirror);