Lines Matching refs:spage
231 static void scrub_page_get(struct scrub_page *spage);
232 static void scrub_page_put(struct scrub_page *spage);
248 struct scrub_page *spage);
254 static inline int scrub_is_page_on_raid56(struct scrub_page *spage) in scrub_is_page_on_raid56() argument
256 return spage->recover && in scrub_is_page_on_raid56()
257 (spage->recover->bioc->map_type & BTRFS_BLOCK_GROUP_RAID56_MASK); in scrub_is_page_on_raid56()
1323 struct scrub_page *spage; in scrub_setup_recheck_block() local
1328 spage = kzalloc(sizeof(*spage), GFP_NOFS); in scrub_setup_recheck_block()
1329 if (!spage) { in scrub_setup_recheck_block()
1337 scrub_page_get(spage); in scrub_setup_recheck_block()
1338 sblock->pagev[page_index] = spage; in scrub_setup_recheck_block()
1339 spage->sblock = sblock; in scrub_setup_recheck_block()
1340 spage->flags = flags; in scrub_setup_recheck_block()
1341 spage->generation = generation; in scrub_setup_recheck_block()
1342 spage->logical = logical; in scrub_setup_recheck_block()
1343 spage->have_csum = have_csum; in scrub_setup_recheck_block()
1345 memcpy(spage->csum, in scrub_setup_recheck_block()
1358 spage->physical = bioc->stripes[stripe_index].physical + in scrub_setup_recheck_block()
1360 spage->dev = bioc->stripes[stripe_index].dev; in scrub_setup_recheck_block()
1363 spage->physical_for_dev_replace = in scrub_setup_recheck_block()
1367 spage->mirror_num = mirror_index + 1; in scrub_setup_recheck_block()
1369 spage->page = alloc_page(GFP_NOFS); in scrub_setup_recheck_block()
1370 if (!spage->page) in scrub_setup_recheck_block()
1374 spage->recover = recover; in scrub_setup_recheck_block()
1392 struct scrub_page *spage) in scrub_submit_raid56_bio_wait() argument
1398 bio->bi_iter.bi_sector = spage->logical >> 9; in scrub_submit_raid56_bio_wait()
1402 mirror_num = spage->sblock->pagev[0]->mirror_num; in scrub_submit_raid56_bio_wait()
1403 ret = raid56_parity_recover(fs_info, bio, spage->recover->bioc, in scrub_submit_raid56_bio_wait()
1404 spage->recover->map_length, in scrub_submit_raid56_bio_wait()
1429 struct scrub_page *spage = sblock->pagev[page_num]; in scrub_recheck_block_on_raid56() local
1431 WARN_ON(!spage->page); in scrub_recheck_block_on_raid56()
1432 bio_add_page(bio, spage->page, PAGE_SIZE, 0); in scrub_recheck_block_on_raid56()
1473 struct scrub_page *spage = sblock->pagev[page_num]; in scrub_recheck_block() local
1475 if (spage->dev->bdev == NULL) { in scrub_recheck_block()
1476 spage->io_error = 1; in scrub_recheck_block()
1481 WARN_ON(!spage->page); in scrub_recheck_block()
1483 bio_set_dev(bio, spage->dev->bdev); in scrub_recheck_block()
1485 bio_add_page(bio, spage->page, fs_info->sectorsize, 0); in scrub_recheck_block()
1486 bio->bi_iter.bi_sector = spage->physical >> 9; in scrub_recheck_block()
1490 spage->io_error = 1; in scrub_recheck_block()
1502 struct scrub_page *spage) in scrub_check_fsid() argument
1504 struct btrfs_fs_devices *fs_devices = spage->dev->fs_devices; in scrub_check_fsid()
1612 struct scrub_page *spage = sblock->pagev[page_num]; in scrub_write_page_to_dev_replace() local
1614 BUG_ON(spage->page == NULL); in scrub_write_page_to_dev_replace()
1615 if (spage->io_error) in scrub_write_page_to_dev_replace()
1616 clear_page(page_address(spage->page)); in scrub_write_page_to_dev_replace()
1618 return scrub_add_page_to_wr_bio(sblock->sctx, spage); in scrub_write_page_to_dev_replace()
1644 struct scrub_page *spage) in scrub_add_page_to_wr_bio() argument
1667 spage->physical_for_dev_replace); 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()
1689 spage->physical_for_dev_replace || in scrub_add_page_to_wr_bio()
1691 spage->logical) { 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()
1708 sbio->pagev[sbio->page_count] = spage; in scrub_add_page_to_wr_bio()
1709 scrub_page_get(spage); in scrub_add_page_to_wr_bio()
1764 struct scrub_page *spage = sbio->pagev[i]; in scrub_wr_bio_end_io_worker() local
1766 spage->io_error = 1; in scrub_wr_bio_end_io_worker()
1819 struct scrub_page *spage; in scrub_checksum_data() local
1823 spage = sblock->pagev[0]; in scrub_checksum_data()
1824 if (!spage->have_csum) in scrub_checksum_data()
1827 kaddr = page_address(spage->page); in scrub_checksum_data()
1838 if (memcmp(csum, spage->csum, fs_info->csum_size)) in scrub_checksum_data()
1859 struct scrub_page *spage; in scrub_checksum_tree_block() local
1867 spage = sblock->pagev[0]; in scrub_checksum_tree_block()
1868 kaddr = page_address(spage->page); in scrub_checksum_tree_block()
1877 if (spage->logical != btrfs_stack_header_bytenr(h)) in scrub_checksum_tree_block()
1880 if (spage->generation != btrfs_stack_header_generation(h)) { in scrub_checksum_tree_block()
1885 if (!scrub_check_fsid(h->fsid, spage)) in scrub_checksum_tree_block()
1916 struct scrub_page *spage; in scrub_checksum_super() local
1922 spage = sblock->pagev[0]; in scrub_checksum_super()
1923 kaddr = page_address(spage->page); in scrub_checksum_super()
1926 if (spage->logical != btrfs_super_bytenr(s)) in scrub_checksum_super()
1929 if (spage->generation != btrfs_super_generation(s)) in scrub_checksum_super()
1932 if (!scrub_check_fsid(s->fsid, spage)) in scrub_checksum_super()
1953 btrfs_dev_stat_inc_and_print(spage->dev, in scrub_checksum_super()
1956 btrfs_dev_stat_inc_and_print(spage->dev, in scrub_checksum_super()
1982 static void scrub_page_get(struct scrub_page *spage) in scrub_page_get() argument
1984 atomic_inc(&spage->refs); in scrub_page_get()
1987 static void scrub_page_put(struct scrub_page *spage) in scrub_page_put() argument
1989 if (atomic_dec_and_test(&spage->refs)) { in scrub_page_put()
1990 if (spage->page) in scrub_page_put()
1991 __free_page(spage->page); in scrub_page_put()
1992 kfree(spage); in scrub_page_put()
2071 struct scrub_page *spage) in scrub_add_page_to_rd_bio() argument
2073 struct scrub_block *sblock = spage->sblock; 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()
2115 spage->physical || in scrub_add_page_to_rd_bio()
2117 spage->logical || 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()
2238 struct scrub_page *spage = sblock->pagev[i]; in scrub_missing_raid56_pages() local
2240 raid56_add_scrub_pages(rbio, spage->page, spage->logical); in scrub_missing_raid56_pages()
2283 struct scrub_page *spage; in scrub_pages() local
2291 spage = kzalloc(sizeof(*spage), GFP_KERNEL); in scrub_pages()
2292 if (!spage) { in scrub_pages()
2301 scrub_page_get(spage); in scrub_pages()
2302 sblock->pagev[index] = spage; in scrub_pages()
2303 spage->sblock = sblock; in scrub_pages()
2304 spage->dev = dev; in scrub_pages()
2305 spage->flags = flags; in scrub_pages()
2306 spage->generation = gen; in scrub_pages()
2307 spage->logical = logical; in scrub_pages()
2308 spage->physical = physical; in scrub_pages()
2309 spage->physical_for_dev_replace = physical_for_dev_replace; in scrub_pages()
2310 spage->mirror_num = mirror_num; in scrub_pages()
2312 spage->have_csum = 1; in scrub_pages()
2313 memcpy(spage->csum, csum, sctx->fs_info->csum_size); in scrub_pages()
2315 spage->have_csum = 0; in scrub_pages()
2318 spage->page = alloc_page(GFP_KERNEL); in scrub_pages()
2319 if (!spage->page) in scrub_pages()
2336 struct scrub_page *spage = sblock->pagev[index]; in scrub_pages() local
2339 ret = scrub_add_page_to_rd_bio(sctx, spage); in scrub_pages()
2375 struct scrub_page *spage = sbio->pagev[i]; in scrub_bio_end_io_worker() local
2377 spage->io_error = 1; in scrub_bio_end_io_worker()
2378 spage->sblock->no_io_error_seen = 0; in scrub_bio_end_io_worker()
2384 struct scrub_page *spage = sbio->pagev[i]; in scrub_bio_end_io_worker() local
2385 struct scrub_block *sblock = spage->sblock; in scrub_bio_end_io_worker()
2623 struct scrub_page *spage; in scrub_pages_for_parity() local
2625 spage = kzalloc(sizeof(*spage), GFP_KERNEL); in scrub_pages_for_parity()
2626 if (!spage) { in scrub_pages_for_parity()
2636 scrub_page_get(spage); in scrub_pages_for_parity()
2637 sblock->pagev[index] = spage; in scrub_pages_for_parity()
2639 scrub_page_get(spage); in scrub_pages_for_parity()
2640 list_add_tail(&spage->list, &sparity->spages); in scrub_pages_for_parity()
2641 spage->sblock = sblock; in scrub_pages_for_parity()
2642 spage->dev = dev; in scrub_pages_for_parity()
2643 spage->flags = flags; in scrub_pages_for_parity()
2644 spage->generation = gen; in scrub_pages_for_parity()
2645 spage->logical = logical; in scrub_pages_for_parity()
2646 spage->physical = physical; in scrub_pages_for_parity()
2647 spage->mirror_num = mirror_num; in scrub_pages_for_parity()
2649 spage->have_csum = 1; in scrub_pages_for_parity()
2650 memcpy(spage->csum, csum, sctx->fs_info->csum_size); in scrub_pages_for_parity()
2652 spage->have_csum = 0; in scrub_pages_for_parity()
2655 spage->page = alloc_page(GFP_KERNEL); in scrub_pages_for_parity()
2656 if (!spage->page) in scrub_pages_for_parity()
2668 struct scrub_page *spage = sblock->pagev[index]; in scrub_pages_for_parity() local
2671 ret = scrub_add_page_to_rd_bio(sctx, spage); in scrub_pages_for_parity()