Lines Matching refs:cur

27 	struct xfs_btree_cur	*cur,
48 if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
49 trace_xchk_ifork_btree_op_error(sc, cur, level,
52 trace_xchk_btree_op_error(sc, cur, level,
62 struct xfs_btree_cur *cur,
66 return __xchk_btree_process_error(sc, cur, level, error,
73 struct xfs_btree_cur *cur,
77 return __xchk_btree_process_error(sc, cur, level, error,
85 struct xfs_btree_cur *cur,
92 if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
93 trace_xchk_ifork_btree_error(sc, cur, level,
96 trace_xchk_btree_error(sc, cur, level,
103 struct xfs_btree_cur *cur,
106 __xchk_btree_set_corrupt(sc, cur, level, XFS_SCRUB_OFLAG_CORRUPT,
113 struct xfs_btree_cur *cur,
116 __xchk_btree_set_corrupt(sc, cur, level, XFS_SCRUB_OFLAG_XCORRUPT,
128 struct xfs_btree_cur *cur = bs->cur;
137 block = xfs_btree_get_block(cur, 0, &bp);
138 rec = xfs_btree_rec_addr(cur, cur->bc_ptrs[0], block);
140 trace_xchk_btree_rec(bs->sc, cur, 0);
143 if (!bs->firstrec && !cur->bc_ops->recs_inorder(cur, &bs->lastrec, rec))
144 xchk_btree_set_corrupt(bs->sc, cur, 0);
146 memcpy(&bs->lastrec, rec, cur->bc_ops->rec_len);
148 if (cur->bc_nlevels == 1)
152 cur->bc_ops->init_key_from_rec(&key, rec);
153 keyblock = xfs_btree_get_block(cur, 1, &bp);
154 keyp = xfs_btree_key_addr(cur, cur->bc_ptrs[1], keyblock);
155 if (cur->bc_ops->diff_two_keys(cur, &key, keyp) < 0)
156 xchk_btree_set_corrupt(bs->sc, cur, 1);
158 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
162 cur->bc_ops->init_high_key_from_rec(&hkey, rec);
163 keyp = xfs_btree_high_key_addr(cur, cur->bc_ptrs[1], keyblock);
164 if (cur->bc_ops->diff_two_keys(cur, keyp, &hkey) < 0)
165 xchk_btree_set_corrupt(bs->sc, cur, 1);
177 struct xfs_btree_cur *cur = bs->cur;
184 block = xfs_btree_get_block(cur, level, &bp);
185 key = xfs_btree_key_addr(cur, cur->bc_ptrs[level], block);
187 trace_xchk_btree_key(bs->sc, cur, level);
191 !cur->bc_ops->keys_inorder(cur, &bs->lastkey[level], key))
192 xchk_btree_set_corrupt(bs->sc, cur, level);
194 memcpy(&bs->lastkey[level], key, cur->bc_ops->key_len);
196 if (level + 1 >= cur->bc_nlevels)
200 keyblock = xfs_btree_get_block(cur, level + 1, &bp);
201 keyp = xfs_btree_key_addr(cur, cur->bc_ptrs[level + 1], keyblock);
202 if (cur->bc_ops->diff_two_keys(cur, key, keyp) < 0)
203 xchk_btree_set_corrupt(bs->sc, cur, level);
205 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
209 key = xfs_btree_high_key_addr(cur, cur->bc_ptrs[level], block);
210 keyp = xfs_btree_high_key_addr(cur, cur->bc_ptrs[level + 1], keyblock);
211 if (cur->bc_ops->diff_two_keys(cur, keyp, key) < 0)
212 xchk_btree_set_corrupt(bs->sc, cur, level);
228 if ((bs->cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
229 level == bs->cur->bc_nlevels)
233 if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS)
234 res = xfs_btree_check_lptr(bs->cur, be64_to_cpu(ptr->l), level);
236 res = xfs_btree_check_sptr(bs->cur, be32_to_cpu(ptr->s), level);
238 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
251 struct xfs_btree_cur *cur = bs->cur;
259 error = xfs_btree_dup_cursor(cur, &ncur);
260 if (!xchk_btree_process_error(bs->sc, cur, level + 1, &error) ||
268 if (xfs_btree_ptr_is_null(cur, sibling)) {
274 xchk_btree_set_corrupt(bs->sc, cur, level);
284 if (!xchk_btree_process_error(bs->sc, cur, level + 1, &error))
287 xchk_btree_set_corrupt(bs->sc, cur, level + 1);
299 if (xfs_btree_diff_two_ptrs(cur, pp, sibling))
300 xchk_btree_set_corrupt(bs->sc, cur, level);
312 struct xfs_btree_cur *cur = bs->cur;
318 xfs_btree_get_sibling(cur, block, &leftsib, XFS_BB_LEFTSIB);
319 xfs_btree_get_sibling(cur, block, &rightsib, XFS_BB_RIGHTSIB);
323 if (level == cur->bc_nlevels - 1) {
324 if (!xfs_btree_ptr_is_null(cur, &leftsib) ||
325 !xfs_btree_ptr_is_null(cur, &rightsib))
326 xchk_btree_set_corrupt(bs->sc, cur, level);
367 if (!bs->cur)
370 btnum = bs->cur->bc_btnum;
371 agno = xfs_daddr_to_agno(bs->cur->bc_mp, daddr);
372 agbno = xfs_daddr_to_agbno(bs->cur->bc_mp, daddr);
374 init_sa = bs->cur->bc_flags & XFS_BTREE_LONG_PTRS;
377 if (!xchk_btree_xref_process_error(bs->sc, bs->cur,
384 * The bnobt scrubber aliases bs->cur to bs->sc->sa.bno_cur, so we
389 bs->cur = NULL;
393 bs->cur = NULL;
408 struct xfs_btree_cur *cur = bs->cur;
418 if (!(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE))
419 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
431 if (cur->bc_btnum == XFS_BTNUM_BNO || cur->bc_btnum == XFS_BTNUM_RMAP) {
455 struct xfs_btree_cur *cur = bs->cur;
456 unsigned int root_level = cur->bc_nlevels - 1;
460 if (numrecs >= cur->bc_ops->get_minrecs(cur, level))
470 if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
471 level == cur->bc_nlevels - 2) {
476 root_block = xfs_btree_get_block(cur, root_level, &root_bp);
477 root_maxrecs = cur->bc_ops->get_dmaxrecs(cur, root_level);
480 xchk_btree_set_corrupt(bs->sc, cur, level);
489 xchk_btree_set_corrupt(bs->sc, cur, level);
510 error = xfs_btree_lookup_get_block(bs->cur, level, pp, pblock);
511 if (!xchk_btree_process_error(bs->sc, bs->cur, level, &error) ||
515 xfs_btree_get_block(bs->cur, level, pbp);
516 if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS)
517 failed_at = __xfs_btree_check_lblock(bs->cur, *pblock,
520 failed_at = __xfs_btree_check_sblock(bs->cur, *pblock,
523 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
557 struct xfs_btree_cur *cur = bs->cur;
564 if (level >= cur->bc_nlevels - 1)
568 xfs_btree_get_keys(cur, block, &block_keys);
571 parent_block = xfs_btree_get_block(cur, level + 1, &bp);
572 parent_keys = xfs_btree_key_addr(cur, cur->bc_ptrs[level + 1],
575 if (cur->bc_ops->diff_two_keys(cur, &block_keys, parent_keys) != 0)
576 xchk_btree_set_corrupt(bs->sc, cur, 1);
578 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
582 high_bk = xfs_btree_high_key_from_key(cur, &block_keys);
583 high_pk = xfs_btree_high_key_addr(cur, cur->bc_ptrs[level + 1],
586 if (cur->bc_ops->diff_two_keys(cur, high_bk, high_pk) != 0)
587 xchk_btree_set_corrupt(bs->sc, cur, 1);
598 struct xfs_btree_cur *cur,
604 .cur = cur,
628 if (cur->bc_nlevels > XFS_BTREE_MAXLEVELS) {
629 xchk_btree_set_corrupt(sc, cur, 0);
637 level = cur->bc_nlevels - 1;
638 cur->bc_ops->init_ptr_from_cur(cur, &ptr);
639 if (!xchk_btree_ptr_ok(&bs, cur->bc_nlevels, &ptr))
645 cur->bc_ptrs[level] = 1;
647 while (level < cur->bc_nlevels) {
648 block = xfs_btree_get_block(cur, level, &bp);
652 if (cur->bc_ptrs[level] >
655 if (level < cur->bc_nlevels - 1)
656 cur->bc_ptrs[level + 1]++;
665 recp = xfs_btree_rec_addr(cur, cur->bc_ptrs[0], block);
673 cur->bc_ptrs[level]++;
678 if (cur->bc_ptrs[level] > be16_to_cpu(block->bb_numrecs)) {
680 if (level < cur->bc_nlevels - 1)
681 cur->bc_ptrs[level + 1]++;
690 pp = xfs_btree_ptr_addr(cur, cur->bc_ptrs[level], block);
692 cur->bc_ptrs[level]++;
700 cur->bc_ptrs[level] = 1;
706 if (!error && bs.cur)