Lines Matching refs:rb
99 struct xrep_bmap *rb, in xrep_bmap_discover_shared() argument
103 struct xfs_scrub *sc = rb->sc; in xrep_bmap_discover_shared()
123 rb->reflink_scan = RLS_SET_IFLAG; in xrep_bmap_discover_shared()
131 struct xrep_bmap *rb, in xrep_bmap_from_rmap() argument
143 struct xfs_scrub *sc = rb->sc; in xrep_bmap_from_rmap()
151 if (rb->reflink_scan == RLS_UNKNOWN && !unwritten) { in xrep_bmap_from_rmap()
152 error = xrep_bmap_discover_shared(rb, startblock, blockcount); in xrep_bmap_from_rmap()
163 fa = xfs_bmap_validate_extent(sc->ip, rb->whichfork, &irec); in xrep_bmap_from_rmap()
169 trace_xrep_bmap_found(sc->ip, rb->whichfork, &irec); in xrep_bmap_from_rmap()
174 error = xfarray_append(rb->bmap_records, &rbe); in xrep_bmap_from_rmap()
178 rb->real_mappings++; in xrep_bmap_from_rmap()
191 struct xrep_bmap *rb, in xrep_bmap_check_fork_rmap() argument
195 struct xfs_scrub *sc = rb->sc; in xrep_bmap_check_fork_rmap()
248 struct xrep_bmap *rb = priv; in xrep_bmap_walk_rmap() local
252 if (xchk_should_terminate(rb->sc, &error)) in xrep_bmap_walk_rmap()
255 if (rec->rm_owner != rb->sc->ip->i_ino) in xrep_bmap_walk_rmap()
258 error = xrep_bmap_check_fork_rmap(rb, cur, rec); in xrep_bmap_walk_rmap()
266 rb->nblocks += rec->rm_blockcount; in xrep_bmap_walk_rmap()
269 if (rb->whichfork == XFS_DATA_FORK && in xrep_bmap_walk_rmap()
272 if (rb->whichfork == XFS_ATTR_FORK && in xrep_bmap_walk_rmap()
277 if ((rec->rm_flags & XFS_RMAP_UNWRITTEN) && !rb->allow_unwritten) in xrep_bmap_walk_rmap()
283 rb->old_bmbt_block_count += rec->rm_blockcount; in xrep_bmap_walk_rmap()
284 return xfsb_bitmap_set(&rb->old_bmbt_blocks, fsbno, in xrep_bmap_walk_rmap()
288 return xrep_bmap_from_rmap(rb, rec->rm_offset, fsbno, in xrep_bmap_walk_rmap()
320 struct xrep_bmap *rb) in xrep_bmap_sort_records() argument
327 error = xfarray_sort(rb->bmap_records, xrep_bmap_extent_cmp, in xrep_bmap_sort_records()
332 foreach_xfarray_idx(rb->bmap_records, array_cur) { in xrep_bmap_sort_records()
335 if (xchk_should_terminate(rb->sc, &error)) in xrep_bmap_sort_records()
338 error = xfarray_load(rb->bmap_records, array_cur, &rec); in xrep_bmap_sort_records()
356 struct xrep_bmap *rb, in xrep_bmap_scan_ag() argument
359 struct xfs_scrub *sc = rb->sc; in xrep_bmap_scan_ag()
366 error = xfs_rmap_query_all(sc->sa.rmap_cur, xrep_bmap_walk_rmap, rb); in xrep_bmap_scan_ag()
412 struct xrep_bmap *rb = priv; in xrep_bmap_walk_rtrmap() local
415 if (xchk_should_terminate(rb->sc, &error)) in xrep_bmap_walk_rtrmap()
419 if (rec->rm_owner != rb->sc->ip->i_ino) in xrep_bmap_walk_rtrmap()
422 error = xrep_bmap_check_rtfork_rmap(rb->sc, cur, rec); in xrep_bmap_walk_rtrmap()
430 rb->nblocks += rec->rm_blockcount; in xrep_bmap_walk_rtrmap()
433 if (rb->whichfork == XFS_DATA_FORK && in xrep_bmap_walk_rtrmap()
436 if (rb->whichfork == XFS_ATTR_FORK && in xrep_bmap_walk_rtrmap()
440 return xrep_bmap_from_rmap(rb, rec->rm_offset, in xrep_bmap_walk_rtrmap()
450 struct xrep_bmap *rb, in xrep_bmap_scan_rtgroup() argument
453 struct xfs_scrub *sc = rb->sc; in xrep_bmap_scan_rtgroup()
466 error = xfs_rmap_query_all(sc->sr.rmap_cur, xrep_bmap_walk_rtrmap, rb); in xrep_bmap_scan_rtgroup()
473 xrep_bmap_scan_rtgroup(struct xrep_bmap *rb, struct xfs_rtgroup *rtg) in xrep_bmap_scan_rtgroup() argument
482 struct xrep_bmap *rb) in xrep_bmap_find_delalloc() argument
487 struct xfs_inode *ip = rb->sc->ip; in xrep_bmap_find_delalloc()
488 struct xfs_ifork *ifp = xfs_ifork_ptr(ip, rb->whichfork); in xrep_bmap_find_delalloc()
495 if (rb->whichfork == XFS_ATTR_FORK || ip->i_delayed_blks == 0) in xrep_bmap_find_delalloc()
504 trace_xrep_bmap_found(ip, rb->whichfork, &irec); in xrep_bmap_find_delalloc()
506 if (xchk_should_terminate(rb->sc, &error)) in xrep_bmap_find_delalloc()
509 error = xfarray_append(rb->bmap_records, &rbe); in xrep_bmap_find_delalloc()
524 struct xrep_bmap *rb) in xrep_bmap_find_mappings() argument
526 struct xfs_scrub *sc = rb->sc; in xrep_bmap_find_mappings()
538 error = xrep_bmap_scan_rtgroup(rb, rtg); in xrep_bmap_find_mappings()
548 error = xrep_bmap_scan_ag(rb, pag); in xrep_bmap_find_mappings()
555 return xrep_bmap_find_delalloc(rb); in xrep_bmap_find_mappings()
569 struct xrep_bmap *rb = priv; in xrep_bmap_get_records() local
576 error = xfarray_load(rb->bmap_records, rb->array_cur++, in xrep_bmap_get_records()
598 struct xrep_bmap *rb = priv; in xrep_bmap_claim_block() local
600 return xrep_newbt_claim_block(cur, &rb->new_bmapbt, ptr); in xrep_bmap_claim_block()
619 struct xrep_bmap *rb) in xrep_bmap_reset_counters() argument
621 struct xfs_scrub *sc = rb->sc; in xrep_bmap_reset_counters()
622 struct xbtree_ifakeroot *ifake = &rb->new_bmapbt.ifake; in xrep_bmap_reset_counters()
625 if (rb->reflink_scan == RLS_SET_IFLAG) in xrep_bmap_reset_counters()
632 delta = ifake->if_blocks - rb->old_bmbt_block_count; in xrep_bmap_reset_counters()
633 sc->ip->i_nblocks = rb->nblocks + delta; in xrep_bmap_reset_counters()
651 struct xrep_bmap *rb) in xrep_bmap_extents_load() argument
655 struct xfs_ifork *ifp = rb->new_bmapbt.ifake.if_fork; in xrep_bmap_extents_load()
663 foreach_xfarray_idx(rb->bmap_records, array_cur) { in xrep_bmap_extents_load()
666 error = xfarray_load(rb->bmap_records, array_cur, &rec); in xrep_bmap_extents_load()
679 return xrep_ino_ensure_extent_count(rb->sc, rb->whichfork, in xrep_bmap_extents_load()
689 struct xrep_bmap *rb, in xrep_bmap_btree_load() argument
692 struct xfs_scrub *sc = rb->sc; in xrep_bmap_btree_load()
697 &rb->new_bmapbt.bload, rb->real_mappings); in xrep_bmap_btree_load()
712 rb->new_bmapbt.bload.nr_blocks, 0, true); in xrep_bmap_btree_load()
717 error = xrep_newbt_alloc_blocks(&rb->new_bmapbt, in xrep_bmap_btree_load()
718 rb->new_bmapbt.bload.nr_blocks); in xrep_bmap_btree_load()
723 rb->array_cur = XFARRAY_CURSOR_INIT; in xrep_bmap_btree_load()
724 error = xfs_btree_bload(bmap_cur, &rb->new_bmapbt.bload, rb); in xrep_bmap_btree_load()
735 return xrep_bmap_extents_load(rb); in xrep_bmap_btree_load()
747 struct xrep_bmap *rb) in xrep_bmap_build_new_fork() argument
750 struct xfs_scrub *sc = rb->sc; in xrep_bmap_build_new_fork()
752 struct xbtree_ifakeroot *ifake = &rb->new_bmapbt.ifake; in xrep_bmap_build_new_fork()
755 error = xrep_bmap_sort_records(rb); in xrep_bmap_build_new_fork()
763 xfs_rmap_ino_bmbt_owner(&oinfo, sc->ip->i_ino, rb->whichfork); in xrep_bmap_build_new_fork()
764 error = xrep_newbt_init_inode(&rb->new_bmapbt, sc, rb->whichfork, in xrep_bmap_build_new_fork()
769 rb->new_bmapbt.bload.get_records = xrep_bmap_get_records; in xrep_bmap_build_new_fork()
770 rb->new_bmapbt.bload.claim_block = xrep_bmap_claim_block; in xrep_bmap_build_new_fork()
771 rb->new_bmapbt.bload.iroot_size = xrep_bmap_iroot_size; in xrep_bmap_build_new_fork()
785 if (rb->real_mappings <= XFS_IFORK_MAXEXT(sc->ip, rb->whichfork)) { in xrep_bmap_build_new_fork()
787 error = xrep_bmap_extents_load(rb); in xrep_bmap_build_new_fork()
790 error = xrep_bmap_btree_load(rb, bmap_cur); in xrep_bmap_build_new_fork()
801 xfs_bmbt_commit_staged_btree(bmap_cur, sc->tp, rb->whichfork); in xrep_bmap_build_new_fork()
805 error = xrep_bmap_reset_counters(rb); in xrep_bmap_build_new_fork()
810 error = xrep_newbt_commit(&rb->new_bmapbt); in xrep_bmap_build_new_fork()
820 xrep_newbt_cancel(&rb->new_bmapbt); in xrep_bmap_build_new_fork()
830 struct xrep_bmap *rb) in xrep_bmap_remove_old_tree() argument
832 struct xfs_scrub *sc = rb->sc; in xrep_bmap_remove_old_tree()
836 xfs_rmap_ino_bmbt_owner(&oinfo, sc->ip->i_ino, rb->whichfork); in xrep_bmap_remove_old_tree()
837 return xrep_reap_fsblocks(sc, &rb->old_bmbt_blocks, &oinfo); in xrep_bmap_remove_old_tree()
925 struct xrep_bmap *rb; in xrep_bmap() local
937 rb = kzalloc(sizeof(struct xrep_bmap), XCHK_GFP_FLAGS); in xrep_bmap()
938 if (!rb) in xrep_bmap()
940 rb->sc = sc; in xrep_bmap()
941 rb->whichfork = whichfork; in xrep_bmap()
942 rb->reflink_scan = xrep_bmap_init_reflink_scan(sc, whichfork); in xrep_bmap()
943 rb->allow_unwritten = allow_unwritten; in xrep_bmap()
951 sizeof(struct xfs_bmbt_rec), &rb->bmap_records); in xrep_bmap()
957 xfsb_bitmap_init(&rb->old_bmbt_blocks); in xrep_bmap()
958 error = xrep_bmap_find_mappings(rb); in xrep_bmap()
965 error = xrep_bmap_build_new_fork(rb); in xrep_bmap()
970 error = xrep_bmap_remove_old_tree(rb); in xrep_bmap()
975 xfsb_bitmap_destroy(&rb->old_bmbt_blocks); in xrep_bmap()
976 xfarray_destroy(rb->bmap_records); in xrep_bmap()
978 kfree(rb); in xrep_bmap()