Lines Matching refs:sbio
542 struct scrub_bio *sbio = sctx->bios[sctx->curr]; in scrub_free_ctx() local
544 for (i = 0; i < sbio->page_count; i++) { in scrub_free_ctx()
545 WARN_ON(!sbio->pagev[i]->page); in scrub_free_ctx()
546 scrub_block_put(sbio->pagev[i]->sblock); in scrub_free_ctx()
548 bio_put(sbio->bio); in scrub_free_ctx()
552 struct scrub_bio *sbio = sctx->bios[i]; in scrub_free_ctx() local
554 if (!sbio) in scrub_free_ctx()
556 kfree(sbio); in scrub_free_ctx()
586 struct scrub_bio *sbio; in scrub_setup_ctx() local
588 sbio = kzalloc(sizeof(*sbio), GFP_KERNEL); in scrub_setup_ctx()
589 if (!sbio) in scrub_setup_ctx()
591 sctx->bios[i] = sbio; in scrub_setup_ctx()
593 sbio->index = i; in scrub_setup_ctx()
594 sbio->sctx = sctx; in scrub_setup_ctx()
595 sbio->page_count = 0; in scrub_setup_ctx()
596 btrfs_init_work(&sbio->work, scrub_bio_end_io_worker, NULL, in scrub_setup_ctx()
1646 struct scrub_bio *sbio; in scrub_add_page_to_wr_bio() local
1662 sbio = sctx->wr_curr_bio; in scrub_add_page_to_wr_bio()
1663 if (sbio->page_count == 0) { in scrub_add_page_to_wr_bio()
1673 sbio->physical = spage->physical_for_dev_replace; in scrub_add_page_to_wr_bio()
1674 sbio->logical = spage->logical; in scrub_add_page_to_wr_bio()
1675 sbio->dev = sctx->wr_tgtdev; in scrub_add_page_to_wr_bio()
1676 bio = sbio->bio; in scrub_add_page_to_wr_bio()
1679 sbio->bio = bio; in scrub_add_page_to_wr_bio()
1682 bio->bi_private = sbio; in scrub_add_page_to_wr_bio()
1684 bio_set_dev(bio, sbio->dev->bdev); in scrub_add_page_to_wr_bio()
1685 bio->bi_iter.bi_sector = sbio->physical >> 9; in scrub_add_page_to_wr_bio()
1687 sbio->status = 0; in scrub_add_page_to_wr_bio()
1688 } else if (sbio->physical + sbio->page_count * sectorsize != in scrub_add_page_to_wr_bio()
1690 sbio->logical + sbio->page_count * sectorsize != in scrub_add_page_to_wr_bio()
1696 ret = bio_add_page(sbio->bio, spage->page, sectorsize, 0); in scrub_add_page_to_wr_bio()
1698 if (sbio->page_count < 1) { in scrub_add_page_to_wr_bio()
1699 bio_put(sbio->bio); in scrub_add_page_to_wr_bio()
1700 sbio->bio = NULL; in scrub_add_page_to_wr_bio()
1708 sbio->pagev[sbio->page_count] = spage; in scrub_add_page_to_wr_bio()
1710 sbio->page_count++; in scrub_add_page_to_wr_bio()
1711 if (sbio->page_count == sctx->pages_per_wr_bio) in scrub_add_page_to_wr_bio()
1720 struct scrub_bio *sbio; in scrub_wr_submit() local
1725 sbio = sctx->wr_curr_bio; in scrub_wr_submit()
1727 WARN_ON(!sbio->bio->bi_bdev); in scrub_wr_submit()
1733 btrfsic_submit_bio(sbio->bio); in scrub_wr_submit()
1736 sctx->write_pointer = sbio->physical + sbio->page_count * in scrub_wr_submit()
1742 struct scrub_bio *sbio = bio->bi_private; in scrub_wr_bio_end_io() local
1743 struct btrfs_fs_info *fs_info = sbio->dev->fs_info; in scrub_wr_bio_end_io()
1745 sbio->status = bio->bi_status; in scrub_wr_bio_end_io()
1746 sbio->bio = bio; in scrub_wr_bio_end_io()
1748 btrfs_init_work(&sbio->work, scrub_wr_bio_end_io_worker, NULL, NULL); in scrub_wr_bio_end_io()
1749 btrfs_queue_work(fs_info->scrub_wr_completion_workers, &sbio->work); in scrub_wr_bio_end_io()
1754 struct scrub_bio *sbio = container_of(work, struct scrub_bio, work); in scrub_wr_bio_end_io_worker() local
1755 struct scrub_ctx *sctx = sbio->sctx; in scrub_wr_bio_end_io_worker()
1758 WARN_ON(sbio->page_count > SCRUB_PAGES_PER_WR_BIO); in scrub_wr_bio_end_io_worker()
1759 if (sbio->status) { in scrub_wr_bio_end_io_worker()
1761 &sbio->sctx->fs_info->dev_replace; in scrub_wr_bio_end_io_worker()
1763 for (i = 0; i < sbio->page_count; i++) { in scrub_wr_bio_end_io_worker()
1764 struct scrub_page *spage = sbio->pagev[i]; in scrub_wr_bio_end_io_worker()
1771 for (i = 0; i < sbio->page_count; i++) in scrub_wr_bio_end_io_worker()
1772 scrub_page_put(sbio->pagev[i]); in scrub_wr_bio_end_io_worker()
1774 bio_put(sbio->bio); in scrub_wr_bio_end_io_worker()
1775 kfree(sbio); in scrub_wr_bio_end_io_worker()
2003 struct scrub_bio *sbio; in scrub_throttle() local
2010 sbio = sctx->bios[sctx->curr]; in scrub_throttle()
2011 device = sbio->dev; in scrub_throttle()
2033 sctx->throttle_sent += sbio->bio->bi_iter.bi_size; in scrub_throttle()
2057 struct scrub_bio *sbio; in scrub_submit() local
2064 sbio = sctx->bios[sctx->curr]; in scrub_submit()
2067 btrfsic_submit_bio(sbio->bio); in scrub_submit()
2074 struct scrub_bio *sbio; in scrub_add_page_to_rd_bio() local
2095 sbio = sctx->bios[sctx->curr]; in scrub_add_page_to_rd_bio()
2096 if (sbio->page_count == 0) { in scrub_add_page_to_rd_bio()
2099 sbio->physical = spage->physical; in scrub_add_page_to_rd_bio()
2100 sbio->logical = spage->logical; in scrub_add_page_to_rd_bio()
2101 sbio->dev = spage->dev; in scrub_add_page_to_rd_bio()
2102 bio = sbio->bio; in scrub_add_page_to_rd_bio()
2105 sbio->bio = bio; in scrub_add_page_to_rd_bio()
2108 bio->bi_private = sbio; in scrub_add_page_to_rd_bio()
2110 bio_set_dev(bio, sbio->dev->bdev); in scrub_add_page_to_rd_bio()
2111 bio->bi_iter.bi_sector = sbio->physical >> 9; in scrub_add_page_to_rd_bio()
2113 sbio->status = 0; in scrub_add_page_to_rd_bio()
2114 } else if (sbio->physical + sbio->page_count * sectorsize != in scrub_add_page_to_rd_bio()
2116 sbio->logical + sbio->page_count * sectorsize != in scrub_add_page_to_rd_bio()
2118 sbio->dev != spage->dev) { in scrub_add_page_to_rd_bio()
2123 sbio->pagev[sbio->page_count] = spage; in scrub_add_page_to_rd_bio()
2124 ret = bio_add_page(sbio->bio, spage->page, sectorsize, 0); in scrub_add_page_to_rd_bio()
2126 if (sbio->page_count < 1) { in scrub_add_page_to_rd_bio()
2127 bio_put(sbio->bio); in scrub_add_page_to_rd_bio()
2128 sbio->bio = NULL; in scrub_add_page_to_rd_bio()
2137 sbio->page_count++; in scrub_add_page_to_rd_bio()
2138 if (sbio->page_count == sctx->pages_per_rd_bio) in scrub_add_page_to_rd_bio()
2357 struct scrub_bio *sbio = bio->bi_private; in scrub_bio_end_io() local
2358 struct btrfs_fs_info *fs_info = sbio->dev->fs_info; in scrub_bio_end_io()
2360 sbio->status = bio->bi_status; in scrub_bio_end_io()
2361 sbio->bio = bio; in scrub_bio_end_io()
2363 btrfs_queue_work(fs_info->scrub_workers, &sbio->work); in scrub_bio_end_io()
2368 struct scrub_bio *sbio = container_of(work, struct scrub_bio, work); in scrub_bio_end_io_worker() local
2369 struct scrub_ctx *sctx = sbio->sctx; in scrub_bio_end_io_worker()
2372 BUG_ON(sbio->page_count > SCRUB_PAGES_PER_RD_BIO); in scrub_bio_end_io_worker()
2373 if (sbio->status) { in scrub_bio_end_io_worker()
2374 for (i = 0; i < sbio->page_count; i++) { in scrub_bio_end_io_worker()
2375 struct scrub_page *spage = sbio->pagev[i]; in scrub_bio_end_io_worker()
2383 for (i = 0; i < sbio->page_count; i++) { in scrub_bio_end_io_worker()
2384 struct scrub_page *spage = sbio->pagev[i]; in scrub_bio_end_io_worker()
2392 bio_put(sbio->bio); in scrub_bio_end_io_worker()
2393 sbio->bio = NULL; in scrub_bio_end_io_worker()
2395 sbio->next_free = sctx->first_free; in scrub_bio_end_io_worker()
2396 sctx->first_free = sbio->index; in scrub_bio_end_io_worker()