Lines Matching refs:cur

28 	struct xfs_btree_cur	*cur,
50 if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
51 trace_xchk_ifork_btree_op_error(sc, cur, level,
54 trace_xchk_btree_op_error(sc, cur, level,
64 struct xfs_btree_cur *cur,
68 return __xchk_btree_process_error(sc, cur, level, error,
75 struct xfs_btree_cur *cur,
79 return __xchk_btree_process_error(sc, cur, level, error,
87 struct xfs_btree_cur *cur,
94 if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
95 trace_xchk_ifork_btree_error(sc, cur, level,
98 trace_xchk_btree_error(sc, cur, level,
105 struct xfs_btree_cur *cur,
108 __xchk_btree_set_corrupt(sc, cur, level, XFS_SCRUB_OFLAG_CORRUPT,
115 struct xfs_btree_cur *cur,
118 __xchk_btree_set_corrupt(sc, cur, level, XFS_SCRUB_OFLAG_XCORRUPT,
125 struct xfs_btree_cur *cur,
128 __xchk_btree_set_corrupt(sc, cur, level, XFS_SCRUB_OFLAG_PREEN,
140 struct xfs_btree_cur *cur = bs->cur;
149 block = xfs_btree_get_block(cur, 0, &bp);
150 rec = xfs_btree_rec_addr(cur, cur->bc_levels[0].ptr, block);
152 trace_xchk_btree_rec(bs->sc, cur, 0);
156 !cur->bc_ops->recs_inorder(cur, &bs->lastrec, rec))
157 xchk_btree_set_corrupt(bs->sc, cur, 0);
158 memcpy(&bs->lastrec, rec, cur->bc_ops->rec_len);
161 if (cur->bc_nlevels == 1)
165 cur->bc_ops->init_key_from_rec(&key, rec);
166 keyblock = xfs_btree_get_block(cur, 1, &bp);
167 keyp = xfs_btree_key_addr(cur, cur->bc_levels[1].ptr, keyblock);
168 if (xfs_btree_keycmp_lt(cur, &key, keyp))
169 xchk_btree_set_corrupt(bs->sc, cur, 1);
171 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
175 cur->bc_ops->init_high_key_from_rec(&hkey, rec);
176 keyp = xfs_btree_high_key_addr(cur, cur->bc_levels[1].ptr, keyblock);
177 if (xfs_btree_keycmp_lt(cur, keyp, &hkey))
178 xchk_btree_set_corrupt(bs->sc, cur, 1);
190 struct xfs_btree_cur *cur = bs->cur;
197 block = xfs_btree_get_block(cur, level, &bp);
198 key = xfs_btree_key_addr(cur, cur->bc_levels[level].ptr, block);
200 trace_xchk_btree_key(bs->sc, cur, level);
204 !cur->bc_ops->keys_inorder(cur, &bs->lastkey[level - 1].key, key))
205 xchk_btree_set_corrupt(bs->sc, cur, level);
206 memcpy(&bs->lastkey[level - 1].key, key, cur->bc_ops->key_len);
209 if (level + 1 >= cur->bc_nlevels)
213 keyblock = xfs_btree_get_block(cur, level + 1, &bp);
214 keyp = xfs_btree_key_addr(cur, cur->bc_levels[level + 1].ptr, keyblock);
215 if (xfs_btree_keycmp_lt(cur, key, keyp))
216 xchk_btree_set_corrupt(bs->sc, cur, level);
218 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
222 key = xfs_btree_high_key_addr(cur, cur->bc_levels[level].ptr, block);
223 keyp = xfs_btree_high_key_addr(cur, cur->bc_levels[level + 1].ptr,
225 if (xfs_btree_keycmp_lt(cur, keyp, key))
226 xchk_btree_set_corrupt(bs->sc, cur, level);
242 if ((bs->cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
243 level == bs->cur->bc_nlevels)
247 if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS)
248 res = xfs_btree_check_lptr(bs->cur, be64_to_cpu(ptr->l), level);
250 res = xfs_btree_check_sptr(bs->cur, be32_to_cpu(ptr->s), level);
252 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
265 struct xfs_btree_cur *cur = bs->cur;
273 error = xfs_btree_dup_cursor(cur, &ncur);
274 if (!xchk_btree_process_error(bs->sc, cur, level + 1, &error) ||
282 if (xfs_btree_ptr_is_null(cur, sibling)) {
288 xchk_btree_set_corrupt(bs->sc, cur, level);
298 if (!xchk_btree_process_error(bs->sc, cur, level + 1, &error))
301 xchk_btree_set_corrupt(bs->sc, cur, level + 1);
313 if (xfs_btree_diff_two_ptrs(cur, pp, sibling))
314 xchk_btree_set_corrupt(bs->sc, cur, level);
326 struct xfs_btree_cur *cur = bs->cur;
332 xfs_btree_get_sibling(cur, block, &leftsib, XFS_BB_LEFTSIB);
333 xfs_btree_get_sibling(cur, block, &rightsib, XFS_BB_RIGHTSIB);
337 if (level == cur->bc_nlevels - 1) {
338 if (!xfs_btree_ptr_is_null(cur, &leftsib) ||
339 !xfs_btree_ptr_is_null(cur, &rightsib))
340 xchk_btree_set_corrupt(bs->sc, cur, level);
381 if (!bs->cur)
384 btnum = bs->cur->bc_btnum;
385 agno = xfs_daddr_to_agno(bs->cur->bc_mp, daddr);
386 agbno = xfs_daddr_to_agbno(bs->cur->bc_mp, daddr);
388 init_sa = bs->cur->bc_flags & XFS_BTREE_LONG_PTRS;
391 if (!xchk_btree_xref_process_error(bs->sc, bs->cur,
398 * The bnobt scrubber aliases bs->cur to bs->sc->sa.bno_cur, so we
403 bs->cur = NULL;
407 bs->cur = NULL;
423 struct xfs_btree_cur *cur = bs->cur;
432 if (!(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE))
433 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
445 if (cur->bc_btnum == XFS_BTNUM_BNO || cur->bc_btnum == XFS_BTNUM_RMAP) {
478 if (bs->cur->bc_btnum == XFS_BTNUM_BMAP &&
479 bs->cur->bc_ino.whichfork == XFS_DATA_FORK &&
496 struct xfs_btree_cur *cur = bs->cur;
497 unsigned int root_level = cur->bc_nlevels - 1;
501 if (numrecs >= cur->bc_ops->get_minrecs(cur, level))
511 if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
512 level == cur->bc_nlevels - 2) {
517 root_block = xfs_btree_get_block(cur, root_level, &root_bp);
518 root_maxrecs = cur->bc_ops->get_dmaxrecs(cur, root_level);
522 xchk_btree_set_corrupt(bs->sc, cur, level);
531 xchk_btree_set_corrupt(bs->sc, cur, level);
547 struct xfs_btree_cur *cur = bs->cur;
551 if (level == cur->bc_nlevels - 1)
554 xfs_btree_get_keys(cur, block, &block_key);
557 parent_block = xfs_btree_get_block(cur, level + 1, &bp);
558 parent_low_key = xfs_btree_key_addr(cur, cur->bc_levels[level + 1].ptr,
560 if (xfs_btree_keycmp_ne(cur, &block_key, parent_low_key)) {
561 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
565 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
569 parent_high_key = xfs_btree_high_key_addr(cur,
570 cur->bc_levels[level + 1].ptr, parent_block);
571 block_high_key = xfs_btree_high_key_from_key(cur, &block_key);
572 if (xfs_btree_keycmp_ne(cur, block_high_key, parent_high_key))
573 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
594 error = xfs_btree_lookup_get_block(bs->cur, level, pp, pblock);
595 if (!xchk_btree_process_error(bs->sc, bs->cur, level, &error) ||
599 xfs_btree_get_block(bs->cur, level, pbp);
600 if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS)
601 failed_at = __xfs_btree_check_lblock(bs->cur, *pblock,
604 failed_at = __xfs_btree_check_sblock(bs->cur, *pblock,
607 xchk_btree_set_corrupt(bs->sc, bs->cur, level);
646 struct xfs_btree_cur *cur = bs->cur;
653 if (level >= cur->bc_nlevels - 1)
657 xfs_btree_get_keys(cur, block, &block_keys);
660 parent_block = xfs_btree_get_block(cur, level + 1, &bp);
661 parent_keys = xfs_btree_key_addr(cur, cur->bc_levels[level + 1].ptr,
664 if (xfs_btree_keycmp_ne(cur, &block_keys, parent_keys))
665 xchk_btree_set_corrupt(bs->sc, cur, 1);
667 if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
671 high_bk = xfs_btree_high_key_from_key(cur, &block_keys);
672 high_pk = xfs_btree_high_key_addr(cur, cur->bc_levels[level + 1].ptr,
675 if (xfs_btree_keycmp_ne(cur, high_bk, high_pk))
676 xchk_btree_set_corrupt(bs->sc, cur, 1);
687 struct xfs_btree_cur *cur,
709 cur_sz = xchk_btree_sizeof(cur->bc_nlevels);
711 xchk_btree_set_corrupt(sc, cur, 0);
717 bs->cur = cur;
730 level = cur->bc_nlevels - 1;
731 cur->bc_ops->init_ptr_from_cur(cur, &ptr);
732 if (!xchk_btree_ptr_ok(bs, cur->bc_nlevels, &ptr))
738 cur->bc_levels[level].ptr = 1;
740 while (level < cur->bc_nlevels) {
741 block = xfs_btree_get_block(cur, level, &bp);
745 if (cur->bc_levels[level].ptr >
748 if (level < cur->bc_nlevels - 1)
749 cur->bc_levels[level + 1].ptr++;
758 recp = xfs_btree_rec_addr(cur, cur->bc_levels[0].ptr,
767 cur->bc_levels[level].ptr++;
772 if (cur->bc_levels[level].ptr >
775 if (level < cur->bc_nlevels - 1)
776 cur->bc_levels[level + 1].ptr++;
785 pp = xfs_btree_ptr_addr(cur, cur->bc_levels[level].ptr, block);
787 cur->bc_levels[level].ptr++;
795 cur->bc_levels[level].ptr = 1;
801 if (!error && bs->cur)