1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2017 Oracle. All Rights Reserved. 4*4882a593Smuzhiyun * Author: Darrick J. Wong <darrick.wong@oracle.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #include "xfs.h" 7*4882a593Smuzhiyun #include "xfs_fs.h" 8*4882a593Smuzhiyun #include "xfs_shared.h" 9*4882a593Smuzhiyun #include "xfs_format.h" 10*4882a593Smuzhiyun #include "xfs_log_format.h" 11*4882a593Smuzhiyun #include "xfs_trans_resv.h" 12*4882a593Smuzhiyun #include "xfs_mount.h" 13*4882a593Smuzhiyun #include "xfs_inode.h" 14*4882a593Smuzhiyun #include "xfs_btree.h" 15*4882a593Smuzhiyun #include "scrub/scrub.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* Figure out which block the btree cursor was pointing to. */ 18*4882a593Smuzhiyun static inline xfs_fsblock_t xchk_btree_cur_fsbno(struct xfs_btree_cur * cur,int level)19*4882a593Smuzhiyunxchk_btree_cur_fsbno( 20*4882a593Smuzhiyun struct xfs_btree_cur *cur, 21*4882a593Smuzhiyun int level) 22*4882a593Smuzhiyun { 23*4882a593Smuzhiyun if (level < cur->bc_nlevels && cur->bc_bufs[level]) 24*4882a593Smuzhiyun return XFS_DADDR_TO_FSB(cur->bc_mp, cur->bc_bufs[level]->b_bn); 25*4882a593Smuzhiyun else if (level == cur->bc_nlevels - 1 && 26*4882a593Smuzhiyun cur->bc_flags & XFS_BTREE_LONG_PTRS) 27*4882a593Smuzhiyun return XFS_INO_TO_FSB(cur->bc_mp, cur->bc_ino.ip->i_ino); 28*4882a593Smuzhiyun else if (!(cur->bc_flags & XFS_BTREE_LONG_PTRS)) 29*4882a593Smuzhiyun return XFS_AGB_TO_FSB(cur->bc_mp, cur->bc_ag.agno, 0); 30*4882a593Smuzhiyun return NULLFSBLOCK; 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* 34*4882a593Smuzhiyun * We include this last to have the helpers above available for the trace 35*4882a593Smuzhiyun * event implementations. 36*4882a593Smuzhiyun */ 37*4882a593Smuzhiyun #define CREATE_TRACE_POINTS 38*4882a593Smuzhiyun #include "scrub/trace.h" 39