On Wed, Dec 05, 2018 at 03:03:56PM -0600, Eric Sandeen wrote: > In order to get more context about a verifier failure, create a new > xfs verifier context (xfs_vc) type and pass it all the way down verifier > callchains to where we might return a failaddr_t. This will eventually > let us return more information, for example line number or buffer offset, > etc. > > At this point it contains only a failaddr member which is not yet used. > > struct xfs_vc { > xfs_failaddr_t fa; > }; > > Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > fs/xfs/libxfs/xfs_alloc.c | 14 +++++++--- > fs/xfs/libxfs/xfs_alloc_btree.c | 15 ++++++----- > fs/xfs/libxfs/xfs_attr_leaf.c | 8 ++++-- > fs/xfs/libxfs/xfs_attr_leaf.h | 2 +- > fs/xfs/libxfs/xfs_attr_remote.c | 13 ++++++--- > fs/xfs/libxfs/xfs_bmap.c | 4 ++- > fs/xfs/libxfs/xfs_bmap.h | 2 +- > fs/xfs/libxfs/xfs_bmap_btree.c | 11 +++++--- > fs/xfs/libxfs/xfs_btree.c | 13 +++++++-- > fs/xfs/libxfs/xfs_btree.h | 14 +++++----- > fs/xfs/libxfs/xfs_da_btree.c | 20 ++++++++------ > fs/xfs/libxfs/xfs_dir2_block.c | 9 ++++--- > fs/xfs/libxfs/xfs_dir2_data.c | 31 +++++++++++++++------- > fs/xfs/libxfs/xfs_dir2_leaf.c | 42 +++++++++++++++++++----------- > fs/xfs/libxfs/xfs_dir2_node.c | 17 ++++++++---- > fs/xfs/libxfs/xfs_dir2_priv.h | 6 ++--- > fs/xfs/libxfs/xfs_dir2_sf.c | 1 + > fs/xfs/libxfs/xfs_dquot_buf.c | 19 +++++++++----- > fs/xfs/libxfs/xfs_ialloc.c | 7 +++-- > fs/xfs/libxfs/xfs_ialloc_btree.c | 13 +++++---- > fs/xfs/libxfs/xfs_inode_buf.c | 28 +++++++++++++------- > fs/xfs/libxfs/xfs_inode_buf.h | 6 ++--- > fs/xfs/libxfs/xfs_inode_fork.c | 13 +++++---- > fs/xfs/libxfs/xfs_inode_fork.h | 6 ++--- > fs/xfs/libxfs/xfs_quota_defs.h | 4 +-- > fs/xfs/libxfs/xfs_refcount_btree.c | 13 +++++---- > fs/xfs/libxfs/xfs_rmap_btree.c | 13 +++++---- > fs/xfs/libxfs/xfs_rtbitmap.c | 2 ++ > fs/xfs/libxfs/xfs_sb.c | 5 +++- > fs/xfs/libxfs/xfs_shared.h | 2 +- > fs/xfs/libxfs/xfs_symlink_remote.c | 8 ++++-- > fs/xfs/libxfs/xfs_types.h | 4 +++ > fs/xfs/scrub/btree.c | 5 ++-- > fs/xfs/scrub/common.c | 3 ++- > fs/xfs/scrub/dabtree.c | 15 ++++++----- > fs/xfs/scrub/inode.c | 6 +++-- > fs/xfs/scrub/repair.c | 4 ++- > fs/xfs/xfs_buf.c | 12 ++++++--- > fs/xfs/xfs_buf.h | 6 ++--- > fs/xfs/xfs_dquot.c | 3 ++- > fs/xfs/xfs_inode.c | 5 ++-- > fs/xfs/xfs_log_recover.c | 6 +++-- > fs/xfs/xfs_qm.c | 3 ++- > 43 files changed, 284 insertions(+), 149 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index e1c0c0d2f1b0..59b8ab08dabd 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -553,6 +553,7 @@ xfs_alloc_fixup_trees( > > static xfs_failaddr_t > xfs_agfl_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -594,6 +595,7 @@ xfs_agfl_verify( > > static void > xfs_agfl_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -611,7 +613,7 @@ xfs_agfl_read_verify( > if (!xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_agfl_verify(bp); > + fa = xfs_agfl_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -619,6 +621,7 @@ xfs_agfl_read_verify( > > static void > xfs_agfl_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -629,7 +632,7 @@ xfs_agfl_write_verify( > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return; > > - fa = xfs_agfl_verify(bp); > + fa = xfs_agfl_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -2575,6 +2578,7 @@ xfs_alloc_put_freelist( > > static xfs_failaddr_t > xfs_agf_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -2631,6 +2635,7 @@ xfs_agf_verify( > > static void > xfs_agf_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -2640,7 +2645,7 @@ xfs_agf_read_verify( > !xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_agf_verify(bp); > + fa = xfs_agf_verify(vc, bp); > if (XFS_TEST_ERROR(fa, mp, XFS_ERRTAG_ALLOC_READ_AGF)) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -2648,13 +2653,14 @@ xfs_agf_read_verify( > > static void > xfs_agf_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > struct xfs_buf_log_item *bip = bp->b_log_item; > xfs_failaddr_t fa; > > - fa = xfs_agf_verify(bp); > + fa = xfs_agf_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > diff --git a/fs/xfs/libxfs/xfs_alloc_btree.c b/fs/xfs/libxfs/xfs_alloc_btree.c > index 4e59cc8a2802..2e9353a76a58 100644 > --- a/fs/xfs/libxfs/xfs_alloc_btree.c > +++ b/fs/xfs/libxfs/xfs_alloc_btree.c > @@ -290,6 +290,7 @@ xfs_cntbt_diff_two_keys( > > static xfs_failaddr_t > xfs_allocbt_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -313,7 +314,7 @@ xfs_allocbt_verify( > level = be16_to_cpu(block->bb_level); > switch (block->bb_magic) { > case cpu_to_be32(XFS_ABTB_CRC_MAGIC): > - fa = xfs_btree_sblock_v5hdr_verify(bp); > + fa = xfs_btree_sblock_v5hdr_verify(vc, bp); > if (fa) > return fa; > /* fall through */ > @@ -325,7 +326,7 @@ xfs_allocbt_verify( > return __this_address; > break; > case cpu_to_be32(XFS_ABTC_CRC_MAGIC): > - fa = xfs_btree_sblock_v5hdr_verify(bp); > + fa = xfs_btree_sblock_v5hdr_verify(vc, bp); > if (fa) > return fa; > /* fall through */ > @@ -340,19 +341,20 @@ xfs_allocbt_verify( > return __this_address; > } > > - return xfs_btree_sblock_verify(bp, mp->m_alloc_mxr[level != 0]); > + return xfs_btree_sblock_verify(vc, bp, mp->m_alloc_mxr[level != 0]); > } > > static void > xfs_allocbt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - if (!xfs_btree_sblock_verify_crc(bp)) > + if (!xfs_btree_sblock_verify_crc(vc, bp)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_allocbt_verify(bp); > + fa = xfs_allocbt_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -363,11 +365,12 @@ xfs_allocbt_read_verify( > > static void > xfs_allocbt_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - fa = xfs_allocbt_verify(bp); > + fa = xfs_allocbt_verify(vc, bp); > if (fa) { > trace_xfs_btree_corrupt(bp, _RET_IP_); > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c > index 2652d00842d6..5b146c909389 100644 > --- a/fs/xfs/libxfs/xfs_attr_leaf.c > +++ b/fs/xfs/libxfs/xfs_attr_leaf.c > @@ -237,6 +237,7 @@ xfs_attr3_leaf_hdr_to_disk( > > static xfs_failaddr_t > xfs_attr3_leaf_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_attr3_icleaf_hdr ichdr; > @@ -322,6 +323,7 @@ xfs_attr3_leaf_verify( > > static void > xfs_attr3_leaf_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -329,7 +331,7 @@ xfs_attr3_leaf_write_verify( > struct xfs_attr3_leaf_hdr *hdr3 = bp->b_addr; > xfs_failaddr_t fa; > > - fa = xfs_attr3_leaf_verify(bp); > + fa = xfs_attr3_leaf_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -352,6 +354,7 @@ xfs_attr3_leaf_write_verify( > */ > static void > xfs_attr3_leaf_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -361,7 +364,7 @@ xfs_attr3_leaf_read_verify( > !xfs_buf_verify_cksum(bp, XFS_ATTR3_LEAF_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_attr3_leaf_verify(bp); > + fa = xfs_attr3_leaf_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -905,6 +908,7 @@ xfs_attr_shortform_allfit( > /* Verify the consistency of an inline attribute fork. */ > xfs_failaddr_t > xfs_attr_shortform_verify( > + struct xfs_vc *vc, > struct xfs_inode *ip) > { > struct xfs_attr_shortform *sfp; > diff --git a/fs/xfs/libxfs/xfs_attr_leaf.h b/fs/xfs/libxfs/xfs_attr_leaf.h > index 7b74e18becff..afe09eec66aa 100644 > --- a/fs/xfs/libxfs/xfs_attr_leaf.h > +++ b/fs/xfs/libxfs/xfs_attr_leaf.h > @@ -41,7 +41,7 @@ int xfs_attr_shortform_to_leaf(struct xfs_da_args *args, > int xfs_attr_shortform_remove(struct xfs_da_args *args); > int xfs_attr_shortform_allfit(struct xfs_buf *bp, struct xfs_inode *dp); > int xfs_attr_shortform_bytesfit(struct xfs_inode *dp, int bytes); > -xfs_failaddr_t xfs_attr_shortform_verify(struct xfs_inode *ip); > +xfs_failaddr_t xfs_attr_shortform_verify(struct xfs_vc *vc, struct xfs_inode *ip); > void xfs_attr_fork_remove(struct xfs_inode *ip, struct xfs_trans *tp); > > /* > diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c > index f86680e08613..e8d629de2cf5 100644 > --- a/fs/xfs/libxfs/xfs_attr_remote.c > +++ b/fs/xfs/libxfs/xfs_attr_remote.c > @@ -78,6 +78,7 @@ xfs_attr3_rmt_hdr_ok( > > static xfs_failaddr_t > xfs_attr3_rmt_verify( > + struct xfs_vc *vc, > struct xfs_mount *mp, > void *ptr, > int fsbsize, > @@ -106,6 +107,7 @@ xfs_attr3_rmt_verify( > > static int > __xfs_attr3_rmt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp, > bool check_crc, > xfs_failaddr_t *failaddr) > @@ -131,7 +133,7 @@ __xfs_attr3_rmt_read_verify( > *failaddr = __this_address; > return -EFSBADCRC; > } > - *failaddr = xfs_attr3_rmt_verify(mp, ptr, blksize, bno); > + *failaddr = xfs_attr3_rmt_verify(vc, mp, ptr, blksize, bno); > if (*failaddr) > return -EFSCORRUPTED; > len -= blksize; > @@ -149,29 +151,32 @@ __xfs_attr3_rmt_read_verify( > > static void > xfs_attr3_rmt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > int error; > > - error = __xfs_attr3_rmt_read_verify(bp, true, &fa); > + error = __xfs_attr3_rmt_read_verify(vc, bp, true, &fa); > if (error) > xfs_verifier_error(bp, error, fa); > } > > static xfs_failaddr_t > xfs_attr3_rmt_verify_struct( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > int error; > > - error = __xfs_attr3_rmt_read_verify(bp, false, &fa); > + error = __xfs_attr3_rmt_read_verify(vc, bp, false, &fa); > return error ? fa : NULL; > } > > static void > xfs_attr3_rmt_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -193,7 +198,7 @@ xfs_attr3_rmt_write_verify( > while (len > 0) { > struct xfs_attr3_rmt_hdr *rmt = (struct xfs_attr3_rmt_hdr *)ptr; > > - fa = xfs_attr3_rmt_verify(mp, ptr, blksize, bno); > + fa = xfs_attr3_rmt_verify(vc, mp, ptr, blksize, bno); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index 19e921d1586f..fe0e0a1df5b1 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -1249,10 +1249,11 @@ xfs_iread_extents( > */ > frp = XFS_BMBT_REC_ADDR(mp, block, 1); > for (j = 0; j < num_recs; j++, frp++, i++) { > + struct xfs_vc vc = { 0 }; The sole field in xfs_vc is a pointer; is this going to trigger gcc warnings about typecasting zero to a pointer? (Which is silly and annoying, but I'm tired of getting patches to swizzle back and forth between NULL and 0...) > xfs_failaddr_t fa; > > xfs_bmbt_disk_get_all(frp, &new); > - fa = xfs_bmap_validate_extent(ip, whichfork, &new); > + fa = xfs_bmap_validate_extent(&vc, ip, whichfork, &new); > if (fa) { > error = -EFSCORRUPTED; > xfs_inode_verifier_error(ip, error, > @@ -6101,6 +6102,7 @@ xfs_bmap_finish_one( > /* Check that an inode's extent does not have invalid flags or bad ranges. */ > xfs_failaddr_t > xfs_bmap_validate_extent( > + struct xfs_vc *vc, > struct xfs_inode *ip, > int whichfork, > struct xfs_bmbt_irec *irec) > diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h > index 488dc8860fd7..a586568cdfb9 100644 > --- a/fs/xfs/libxfs/xfs_bmap.h > +++ b/fs/xfs/libxfs/xfs_bmap.h > @@ -273,7 +273,7 @@ static inline int xfs_bmap_fork_to_state(int whichfork) > } > } > > -xfs_failaddr_t xfs_bmap_validate_extent(struct xfs_inode *ip, int whichfork, > +xfs_failaddr_t xfs_bmap_validate_extent(struct xfs_vc *vc, struct xfs_inode *ip, int whichfork, > struct xfs_bmbt_irec *irec); > > int xfs_bmapi_remap(struct xfs_trans *tp, struct xfs_inode *ip, > diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c > index cdb74d2e2a43..4c8e97709704 100644 > --- a/fs/xfs/libxfs/xfs_bmap_btree.c > +++ b/fs/xfs/libxfs/xfs_bmap_btree.c > @@ -409,6 +409,7 @@ xfs_bmbt_diff_two_keys( > > static xfs_failaddr_t > xfs_bmbt_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -422,7 +423,7 @@ xfs_bmbt_verify( > * XXX: need a better way of verifying the owner here. Right now > * just make sure there has been one set. > */ > - fa = xfs_btree_lblock_v5hdr_verify(bp, XFS_RMAP_OWN_UNKNOWN); > + fa = xfs_btree_lblock_v5hdr_verify(vc, bp, XFS_RMAP_OWN_UNKNOWN); > if (fa) > return fa; > /* fall through */ > @@ -443,11 +444,12 @@ xfs_bmbt_verify( > if (level > max(mp->m_bm_maxlevels[0], mp->m_bm_maxlevels[1])) > return __this_address; > > - return xfs_btree_lblock_verify(bp, mp->m_bmap_dmxr[level != 0]); > + return xfs_btree_lblock_verify(vc, bp, mp->m_bmap_dmxr[level != 0]); > } > > static void > xfs_bmbt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > @@ -455,7 +457,7 @@ xfs_bmbt_read_verify( > if (!xfs_btree_lblock_verify_crc(bp)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_bmbt_verify(bp); > + fa = xfs_bmbt_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -466,11 +468,12 @@ xfs_bmbt_read_verify( > > static void > xfs_bmbt_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - fa = xfs_bmbt_verify(bp); > + fa = xfs_bmbt_verify(vc, bp); > if (fa) { > trace_xfs_btree_corrupt(bp, _RET_IP_); > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c > index bbdae2b4559f..755ac16e90c5 100644 > --- a/fs/xfs/libxfs/xfs_btree.c > +++ b/fs/xfs/libxfs/xfs_btree.c > @@ -58,6 +58,7 @@ xfs_btree_magic( > */ > xfs_failaddr_t > __xfs_btree_check_lblock( > + struct xfs_vc *vc, > struct xfs_btree_cur *cur, > struct xfs_btree_block *block, > int level, > @@ -105,9 +106,10 @@ xfs_btree_check_lblock( > struct xfs_buf *bp) > { > struct xfs_mount *mp = cur->bc_mp; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = __xfs_btree_check_lblock(cur, block, level, bp); > + fa = __xfs_btree_check_lblock(&vc, cur, block, level, bp); > if (unlikely(XFS_TEST_ERROR(fa != NULL, mp, > XFS_ERRTAG_BTREE_CHECK_LBLOCK))) { > if (bp) > @@ -124,6 +126,7 @@ xfs_btree_check_lblock( > */ > xfs_failaddr_t > __xfs_btree_check_sblock( > + struct xfs_vc *vc, > struct xfs_btree_cur *cur, > struct xfs_btree_block *block, > int level, > @@ -169,9 +172,10 @@ xfs_btree_check_sblock( > struct xfs_buf *bp) > { > struct xfs_mount *mp = cur->bc_mp; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = __xfs_btree_check_sblock(cur, block, level, bp); > + fa = __xfs_btree_check_sblock(&vc, cur, block, level, bp); > if (unlikely(XFS_TEST_ERROR(fa != NULL, mp, > XFS_ERRTAG_BTREE_CHECK_SBLOCK))) { > if (bp) > @@ -323,6 +327,7 @@ xfs_btree_sblock_calc_crc( > > bool > xfs_btree_sblock_verify_crc( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); > @@ -4430,6 +4435,7 @@ xfs_btree_change_owner( > /* Verify the v5 fields of a long-format btree block. */ > xfs_failaddr_t > xfs_btree_lblock_v5hdr_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp, > uint64_t owner) > { > @@ -4451,6 +4457,7 @@ xfs_btree_lblock_v5hdr_verify( > /* Verify a long-format btree block. */ > xfs_failaddr_t > xfs_btree_lblock_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp, > unsigned int max_recs) > { > @@ -4482,6 +4489,7 @@ xfs_btree_lblock_verify( > */ > xfs_failaddr_t > xfs_btree_sblock_v5hdr_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -4507,6 +4515,7 @@ xfs_btree_sblock_v5hdr_verify( > */ > xfs_failaddr_t > xfs_btree_sblock_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp, > unsigned int max_recs) > { > diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h > index e3b3e9dce5da..86cc17f1bf3f 100644 > --- a/fs/xfs/libxfs/xfs_btree.h > +++ b/fs/xfs/libxfs/xfs_btree.h > @@ -243,9 +243,9 @@ typedef struct xfs_btree_cur > * Internal long and short btree block checks. They return NULL if the > * block is ok or the address of the failed check otherwise. > */ > -xfs_failaddr_t __xfs_btree_check_lblock(struct xfs_btree_cur *cur, > +xfs_failaddr_t __xfs_btree_check_lblock(struct xfs_vc *vc, struct xfs_btree_cur *cur, > struct xfs_btree_block *block, int level, struct xfs_buf *bp); > -xfs_failaddr_t __xfs_btree_check_sblock(struct xfs_btree_cur *cur, > +xfs_failaddr_t __xfs_btree_check_sblock(struct xfs_vc *vc, struct xfs_btree_cur *cur, > struct xfs_btree_block *block, int level, struct xfs_buf *bp); > > /* > @@ -417,7 +417,7 @@ int xfs_btree_change_owner(struct xfs_btree_cur *cur, uint64_t new_owner, > void xfs_btree_lblock_calc_crc(struct xfs_buf *); > bool xfs_btree_lblock_verify_crc(struct xfs_buf *); > void xfs_btree_sblock_calc_crc(struct xfs_buf *); > -bool xfs_btree_sblock_verify_crc(struct xfs_buf *); > +bool xfs_btree_sblock_verify_crc(struct xfs_vc *vc, struct xfs_buf *); > > /* > * Internal btree helpers also used by xfs_bmap.c. > @@ -457,12 +457,12 @@ static inline int xfs_btree_get_level(struct xfs_btree_block *block) > #define XFS_FILBLKS_MIN(a,b) min_t(xfs_filblks_t, (a), (b)) > #define XFS_FILBLKS_MAX(a,b) max_t(xfs_filblks_t, (a), (b)) > > -xfs_failaddr_t xfs_btree_sblock_v5hdr_verify(struct xfs_buf *bp); > -xfs_failaddr_t xfs_btree_sblock_verify(struct xfs_buf *bp, > +xfs_failaddr_t xfs_btree_sblock_v5hdr_verify(struct xfs_vc *vc, struct xfs_buf *bp); > +xfs_failaddr_t xfs_btree_sblock_verify(struct xfs_vc *vc, struct xfs_buf *bp, > unsigned int max_recs); > -xfs_failaddr_t xfs_btree_lblock_v5hdr_verify(struct xfs_buf *bp, > +xfs_failaddr_t xfs_btree_lblock_v5hdr_verify(struct xfs_vc *vc, struct xfs_buf *bp, > uint64_t owner); > -xfs_failaddr_t xfs_btree_lblock_verify(struct xfs_buf *bp, > +xfs_failaddr_t xfs_btree_lblock_verify(struct xfs_vc *vc, struct xfs_buf *bp, > unsigned int max_recs); > > uint xfs_btree_compute_maxlevels(uint *limits, unsigned long len); > diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c > index 376bee94b5dd..38862a0990d4 100644 > --- a/fs/xfs/libxfs/xfs_da_btree.c > +++ b/fs/xfs/libxfs/xfs_da_btree.c > @@ -118,6 +118,7 @@ xfs_da_state_free(xfs_da_state_t *state) > > static xfs_failaddr_t > xfs_da3_node_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -167,14 +168,15 @@ xfs_da3_node_verify( > > static void > xfs_da3_node_write_verify( > - struct xfs_buf *bp) > + struct xfs_vc *vc, > + struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > struct xfs_buf_log_item *bip = bp->b_log_item; > struct xfs_da3_node_hdr *hdr3 = bp->b_addr; > xfs_failaddr_t fa; > > - fa = xfs_da3_node_verify(bp); > + fa = xfs_da3_node_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -197,6 +199,7 @@ xfs_da3_node_write_verify( > */ > static void > xfs_da3_node_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_da_blkinfo *info = bp->b_addr; > @@ -211,19 +214,19 @@ xfs_da3_node_read_verify( > } > /* fall through */ > case XFS_DA_NODE_MAGIC: > - fa = xfs_da3_node_verify(bp); > + fa = xfs_da3_node_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > case XFS_ATTR_LEAF_MAGIC: > case XFS_ATTR3_LEAF_MAGIC: > bp->b_ops = &xfs_attr3_leaf_buf_ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(vc, bp); > return; > case XFS_DIR2_LEAFN_MAGIC: > case XFS_DIR3_LEAFN_MAGIC: > bp->b_ops = &xfs_dir3_leafn_buf_ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(vc, bp); > return; > default: > xfs_verifier_error(bp, -EFSCORRUPTED, __this_address); > @@ -234,6 +237,7 @@ xfs_da3_node_read_verify( > /* Verify the structure of a da3 block. */ > static xfs_failaddr_t > xfs_da3_node_verify_struct( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_da_blkinfo *info = bp->b_addr; > @@ -241,15 +245,15 @@ xfs_da3_node_verify_struct( > switch (be16_to_cpu(info->magic)) { > case XFS_DA3_NODE_MAGIC: > case XFS_DA_NODE_MAGIC: > - return xfs_da3_node_verify(bp); > + return xfs_da3_node_verify(vc, bp); > case XFS_ATTR_LEAF_MAGIC: > case XFS_ATTR3_LEAF_MAGIC: > bp->b_ops = &xfs_attr3_leaf_buf_ops; > - return bp->b_ops->verify_struct(bp); > + return bp->b_ops->verify_struct(vc, bp); > case XFS_DIR2_LEAFN_MAGIC: > case XFS_DIR3_LEAFN_MAGIC: > bp->b_ops = &xfs_dir3_leafn_buf_ops; > - return bp->b_ops->verify_struct(bp); > + return bp->b_ops->verify_struct(vc, bp); > default: > return __this_address; > } > diff --git a/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c > index 30ed5919da72..65ba4eccce8b 100644 > --- a/fs/xfs/libxfs/xfs_dir2_block.c > +++ b/fs/xfs/libxfs/xfs_dir2_block.c > @@ -48,6 +48,7 @@ xfs_dir_startup(void) > > static xfs_failaddr_t > xfs_dir3_block_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -66,11 +67,12 @@ xfs_dir3_block_verify( > if (hdr3->magic != cpu_to_be32(XFS_DIR2_BLOCK_MAGIC)) > return __this_address; > } > - return __xfs_dir3_data_check(NULL, bp); > + return __xfs_dir3_data_check(vc, NULL, bp); > } > > static void > xfs_dir3_block_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -80,7 +82,7 @@ xfs_dir3_block_read_verify( > !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_dir3_block_verify(bp); > + fa = xfs_dir3_block_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -88,6 +90,7 @@ xfs_dir3_block_read_verify( > > static void > xfs_dir3_block_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -95,7 +98,7 @@ xfs_dir3_block_write_verify( > struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; > xfs_failaddr_t fa; > > - fa = xfs_dir3_block_verify(bp); > + fa = xfs_dir3_block_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > diff --git a/fs/xfs/libxfs/xfs_dir2_data.c b/fs/xfs/libxfs/xfs_dir2_data.c > index 01162c62ec8f..6530621d8144 100644 > --- a/fs/xfs/libxfs/xfs_dir2_data.c > +++ b/fs/xfs/libxfs/xfs_dir2_data.c > @@ -22,6 +22,7 @@ > #include "xfs_log.h" > > static xfs_failaddr_t xfs_dir2_data_freefind_verify( > + struct xfs_vc *vc, > struct xfs_dir2_data_hdr *hdr, struct xfs_dir2_data_free *bf, > struct xfs_dir2_data_unused *dup, > struct xfs_dir2_data_free **bf_ent); > @@ -33,6 +34,7 @@ static xfs_failaddr_t xfs_dir2_data_freefind_verify( > */ > xfs_failaddr_t > __xfs_dir3_data_check( > + struct xfs_vc *vc, /* verifier context */ > struct xfs_inode *dp, /* incore inode pointer */ > struct xfs_buf *bp) /* data block's buffer */ > { > @@ -149,7 +151,7 @@ __xfs_dir3_data_check( > if (be16_to_cpu(*xfs_dir2_data_unused_tag_p(dup)) != > (char *)dup - (char *)hdr) > return __this_address; > - fa = xfs_dir2_data_freefind_verify(hdr, bf, dup, &dfp); > + fa = xfs_dir2_data_freefind_verify(vc, hdr, bf, dup, &dfp); > if (fa) > return fa; > if (dfp) { > @@ -233,9 +235,10 @@ xfs_dir3_data_check( > struct xfs_inode *dp, > struct xfs_buf *bp) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = __xfs_dir3_data_check(dp, bp); > + fa = __xfs_dir3_data_check(&vc, dp, bp); > if (!fa) > return; > xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, dp->i_mount, > @@ -247,6 +250,7 @@ xfs_dir3_data_check( > > static xfs_failaddr_t > xfs_dir3_data_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -265,7 +269,7 @@ xfs_dir3_data_verify( > if (hdr3->magic != cpu_to_be32(XFS_DIR2_DATA_MAGIC)) > return __this_address; > } > - return __xfs_dir3_data_check(NULL, bp); > + return __xfs_dir3_data_check(vc, NULL, bp); > } > > /* > @@ -275,6 +279,7 @@ xfs_dir3_data_verify( > */ > static void > xfs_dir3_data_reada_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_dir2_data_hdr *hdr = bp->b_addr; > @@ -283,12 +288,12 @@ xfs_dir3_data_reada_verify( > case cpu_to_be32(XFS_DIR2_BLOCK_MAGIC): > case cpu_to_be32(XFS_DIR3_BLOCK_MAGIC): > bp->b_ops = &xfs_dir3_block_buf_ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(vc, bp); > return; > case cpu_to_be32(XFS_DIR2_DATA_MAGIC): > case cpu_to_be32(XFS_DIR3_DATA_MAGIC): > bp->b_ops = &xfs_dir3_data_buf_ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(vc, bp); > return; > default: > xfs_verifier_error(bp, -EFSCORRUPTED, __this_address); > @@ -298,6 +303,7 @@ xfs_dir3_data_reada_verify( > > static void > xfs_dir3_data_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -307,7 +313,7 @@ xfs_dir3_data_read_verify( > !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_dir3_data_verify(bp); > + fa = xfs_dir3_data_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -315,6 +321,7 @@ xfs_dir3_data_read_verify( > > static void > xfs_dir3_data_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -322,7 +329,7 @@ xfs_dir3_data_write_verify( > struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; > xfs_failaddr_t fa; > > - fa = xfs_dir3_data_verify(bp); > + fa = xfs_dir3_data_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -384,6 +391,7 @@ xfs_dir3_data_readahead( > */ > static xfs_failaddr_t > xfs_dir2_data_freefind_verify( > + struct xfs_vc *vc, > struct xfs_dir2_data_hdr *hdr, > struct xfs_dir2_data_free *bf, > struct xfs_dir2_data_unused *dup, > @@ -957,6 +965,7 @@ xfs_dir2_data_make_free( > /* Check our free data for obvious signs of corruption. */ > static inline xfs_failaddr_t > xfs_dir2_data_check_free( > + struct xfs_vc *vc, > struct xfs_dir2_data_hdr *hdr, > struct xfs_dir2_data_unused *dup, > xfs_dir2_data_aoff_t offset, > @@ -982,6 +991,7 @@ xfs_dir2_data_check_free( > /* Sanity-check a new bestfree entry. */ > static inline xfs_failaddr_t > xfs_dir2_data_check_new_free( > + struct xfs_vc *vc, > struct xfs_dir2_data_hdr *hdr, > struct xfs_dir2_data_free *dfp, > struct xfs_dir2_data_unused *newdup) > @@ -1013,6 +1023,7 @@ xfs_dir2_data_use_free( > xfs_dir2_data_unused_t *newdup; /* new unused entry */ > xfs_dir2_data_unused_t *newdup2; /* another new unused entry */ > struct xfs_dir2_data_free *bf; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > int matchback; /* matches end of freespace */ > int matchfront; /* matches start of freespace */ > @@ -1020,7 +1031,7 @@ xfs_dir2_data_use_free( > int oldlen; /* old unused entry's length */ > > hdr = bp->b_addr; > - fa = xfs_dir2_data_check_free(hdr, dup, offset, len); > + fa = xfs_dir2_data_check_free(&vc, hdr, dup, offset, len); > if (fa) > goto corrupt; > /* > @@ -1067,7 +1078,7 @@ xfs_dir2_data_use_free( > xfs_dir2_data_freeremove(hdr, bf, dfp, needlogp); > dfp = xfs_dir2_data_freeinsert(hdr, bf, newdup, > needlogp); > - fa = xfs_dir2_data_check_new_free(hdr, dfp, newdup); > + fa = xfs_dir2_data_check_new_free(&vc, hdr, dfp, newdup); > if (fa) > goto corrupt; > /* > @@ -1095,7 +1106,7 @@ xfs_dir2_data_use_free( > xfs_dir2_data_freeremove(hdr, bf, dfp, needlogp); > dfp = xfs_dir2_data_freeinsert(hdr, bf, newdup, > needlogp); > - fa = xfs_dir2_data_check_new_free(hdr, dfp, newdup); > + fa = xfs_dir2_data_check_new_free(&vc, hdr, dfp, newdup); > if (fa) > goto corrupt; > /* > diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c > index 1728a3e6f5cf..1122a639b603 100644 > --- a/fs/xfs/libxfs/xfs_dir2_leaf.c > +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c > @@ -40,6 +40,7 @@ static void xfs_dir3_leaf_log_tail(struct xfs_da_args *args, > #ifdef DEBUG > static xfs_failaddr_t > xfs_dir3_leaf1_check( > + struct xfs_vc *vc, > struct xfs_inode *dp, > struct xfs_buf *bp) > { > @@ -55,7 +56,7 @@ xfs_dir3_leaf1_check( > } else if (leafhdr.magic != XFS_DIR2_LEAF1_MAGIC) > return __this_address; > > - return xfs_dir3_leaf_check_int(dp->i_mount, dp, &leafhdr, leaf); > + return xfs_dir3_leaf_check_int(vc, dp->i_mount, dp, &leafhdr, leaf); > } > > static inline void > @@ -63,9 +64,10 @@ xfs_dir3_leaf_check( > struct xfs_inode *dp, > struct xfs_buf *bp) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = xfs_dir3_leaf1_check(dp, bp); > + fa = xfs_dir3_leaf1_check(&vc, dp, bp); > if (!fa) > return; > xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, dp->i_mount, > @@ -79,6 +81,7 @@ xfs_dir3_leaf_check( > > xfs_failaddr_t > xfs_dir3_leaf_check_int( > + struct xfs_vc *vc, > struct xfs_mount *mp, > struct xfs_inode *dp, > struct xfs_dir3_icleaf_hdr *hdr, > @@ -142,6 +145,7 @@ xfs_dir3_leaf_check_int( > */ > static xfs_failaddr_t > xfs_dir3_leaf_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp, > uint16_t magic) > { > @@ -170,13 +174,14 @@ xfs_dir3_leaf_verify( > return __this_address; > } > > - return xfs_dir3_leaf_check_int(mp, NULL, NULL, leaf); > + return xfs_dir3_leaf_check_int(vc, mp, NULL, NULL, leaf); > } > > static void > __read_verify( > - struct xfs_buf *bp, > - uint16_t magic) > + struct xfs_vc *vc, > + struct xfs_buf *bp, > + uint16_t magic) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > xfs_failaddr_t fa; > @@ -185,7 +190,7 @@ __read_verify( > !xfs_buf_verify_cksum(bp, XFS_DIR3_LEAF_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_dir3_leaf_verify(bp, magic); > + fa = xfs_dir3_leaf_verify(vc, bp, magic); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -193,15 +198,16 @@ __read_verify( > > static void > __write_verify( > - struct xfs_buf *bp, > - uint16_t magic) > + struct xfs_vc *vc, > + struct xfs_buf *bp, > + uint16_t magic) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > struct xfs_buf_log_item *bip = bp->b_log_item; > struct xfs_dir3_leaf_hdr *hdr3 = bp->b_addr; > xfs_failaddr_t fa; > > - fa = xfs_dir3_leaf_verify(bp, magic); > + fa = xfs_dir3_leaf_verify(vc, bp, magic); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -218,44 +224,50 @@ __write_verify( > > static xfs_failaddr_t > xfs_dir3_leaf1_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - return xfs_dir3_leaf_verify(bp, XFS_DIR2_LEAF1_MAGIC); > + return xfs_dir3_leaf_verify(vc, bp, XFS_DIR2_LEAF1_MAGIC); > } > > static void > xfs_dir3_leaf1_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - __read_verify(bp, XFS_DIR2_LEAF1_MAGIC); > + __read_verify(vc, bp, XFS_DIR2_LEAF1_MAGIC); > } > > static void > xfs_dir3_leaf1_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - __write_verify(bp, XFS_DIR2_LEAF1_MAGIC); > + __write_verify(vc, bp, XFS_DIR2_LEAF1_MAGIC); > } > > static xfs_failaddr_t > xfs_dir3_leafn_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - return xfs_dir3_leaf_verify(bp, XFS_DIR2_LEAFN_MAGIC); > + return xfs_dir3_leaf_verify(vc, bp, XFS_DIR2_LEAFN_MAGIC); > } > > static void > xfs_dir3_leafn_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - __read_verify(bp, XFS_DIR2_LEAFN_MAGIC); > + __read_verify(vc, bp, XFS_DIR2_LEAFN_MAGIC); > } > > static void > xfs_dir3_leafn_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - __write_verify(bp, XFS_DIR2_LEAFN_MAGIC); > + __write_verify(vc, bp, XFS_DIR2_LEAFN_MAGIC); > } > > const struct xfs_buf_ops xfs_dir3_leaf1_buf_ops = { > diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c > index f1bb3434f51c..70f54145d0b0 100644 > --- a/fs/xfs/libxfs/xfs_dir2_node.c > +++ b/fs/xfs/libxfs/xfs_dir2_node.c > @@ -43,6 +43,7 @@ static int xfs_dir2_node_addname_int(xfs_da_args_t *args, > #ifdef DEBUG > static xfs_failaddr_t > xfs_dir3_leafn_check( > + struct xfs_vc *vc, > struct xfs_inode *dp, > struct xfs_buf *bp) > { > @@ -58,7 +59,7 @@ xfs_dir3_leafn_check( > } else if (leafhdr.magic != XFS_DIR2_LEAFN_MAGIC) > return __this_address; > > - return xfs_dir3_leaf_check_int(dp->i_mount, dp, &leafhdr, leaf); > + return xfs_dir3_leaf_check_int(vc, dp->i_mount, dp, &leafhdr, leaf); > } > > static inline void > @@ -66,9 +67,10 @@ xfs_dir3_leaf_check( > struct xfs_inode *dp, > struct xfs_buf *bp) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = xfs_dir3_leafn_check(dp, bp); > + fa = xfs_dir3_leafn_check(&vc, dp, bp); > if (!fa) > return; > xfs_corruption_error(__func__, XFS_ERRLEVEL_LOW, dp->i_mount, > @@ -82,6 +84,7 @@ xfs_dir3_leaf_check( > > static xfs_failaddr_t > xfs_dir3_free_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -110,6 +113,7 @@ xfs_dir3_free_verify( > > static void > xfs_dir3_free_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -119,7 +123,7 @@ xfs_dir3_free_read_verify( > !xfs_buf_verify_cksum(bp, XFS_DIR3_FREE_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_dir3_free_verify(bp); > + fa = xfs_dir3_free_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -127,6 +131,7 @@ xfs_dir3_free_read_verify( > > static void > xfs_dir3_free_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -134,7 +139,7 @@ xfs_dir3_free_write_verify( > struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; > xfs_failaddr_t fa; > > - fa = xfs_dir3_free_verify(bp); > + fa = xfs_dir3_free_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -159,6 +164,7 @@ const struct xfs_buf_ops xfs_dir3_free_buf_ops = { > /* Everything ok in the free block header? */ > static xfs_failaddr_t > xfs_dir3_free_header_check( > + struct xfs_vc *vc, > struct xfs_inode *dp, > xfs_dablk_t fbno, > struct xfs_buf *bp) > @@ -201,6 +207,7 @@ __xfs_dir3_free_read( > xfs_daddr_t mappedbno, > struct xfs_buf **bpp) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > int err; > > @@ -210,7 +217,7 @@ __xfs_dir3_free_read( > return err; > > /* Check things that we can't do in the verifier. */ > - fa = xfs_dir3_free_header_check(dp, fbno, *bpp); > + fa = xfs_dir3_free_header_check(&vc, dp, fbno, *bpp); > if (fa) { > xfs_verifier_error(*bpp, -EFSCORRUPTED, fa); > xfs_trans_brelse(tp, *bpp); > diff --git a/fs/xfs/libxfs/xfs_dir2_priv.h b/fs/xfs/libxfs/xfs_dir2_priv.h > index 59f9fb2241a5..c8d5dc67e02b 100644 > --- a/fs/xfs/libxfs/xfs_dir2_priv.h > +++ b/fs/xfs/libxfs/xfs_dir2_priv.h > @@ -32,7 +32,7 @@ extern void xfs_dir3_data_check(struct xfs_inode *dp, struct xfs_buf *bp); > #define xfs_dir3_data_check(dp,bp) > #endif > > -extern xfs_failaddr_t __xfs_dir3_data_check(struct xfs_inode *dp, > +extern xfs_failaddr_t __xfs_dir3_data_check(struct xfs_vc *vc, struct xfs_inode *dp, > struct xfs_buf *bp); > extern int xfs_dir3_data_read(struct xfs_trans *tp, struct xfs_inode *dp, > xfs_dablk_t bno, xfs_daddr_t mapped_bno, struct xfs_buf **bpp); > @@ -78,7 +78,7 @@ xfs_dir3_leaf_find_entry(struct xfs_dir3_icleaf_hdr *leafhdr, > int lowstale, int highstale, int *lfloglow, int *lfloghigh); > extern int xfs_dir2_node_to_leaf(struct xfs_da_state *state); > > -extern xfs_failaddr_t xfs_dir3_leaf_check_int(struct xfs_mount *mp, > +extern xfs_failaddr_t xfs_dir3_leaf_check_int(struct xfs_vc *vc, struct xfs_mount *mp, > struct xfs_inode *dp, struct xfs_dir3_icleaf_hdr *hdr, > struct xfs_dir2_leaf *leaf); > > @@ -117,7 +117,7 @@ extern int xfs_dir2_sf_create(struct xfs_da_args *args, xfs_ino_t pino); > extern int xfs_dir2_sf_lookup(struct xfs_da_args *args); > extern int xfs_dir2_sf_removename(struct xfs_da_args *args); > extern int xfs_dir2_sf_replace(struct xfs_da_args *args); > -extern xfs_failaddr_t xfs_dir2_sf_verify(struct xfs_inode *ip); > +extern xfs_failaddr_t xfs_dir2_sf_verify(struct xfs_vc *vc, struct xfs_inode *ip); > > /* xfs_dir2_readdir.c */ > extern int xfs_readdir(struct xfs_trans *tp, struct xfs_inode *dp, > diff --git a/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c > index 585dfdb7b6b6..ea47b403c1c1 100644 > --- a/fs/xfs/libxfs/xfs_dir2_sf.c > +++ b/fs/xfs/libxfs/xfs_dir2_sf.c > @@ -618,6 +618,7 @@ xfs_dir2_sf_check( > /* Verify the consistency of an inline directory. */ > xfs_failaddr_t > xfs_dir2_sf_verify( > + struct xfs_vc *vc, > struct xfs_inode *ip) > { > struct xfs_mount *mp = ip->i_mount; > diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c > index d293f371dd54..0dc0a8d7ffc4 100644 > --- a/fs/xfs/libxfs/xfs_dquot_buf.c > +++ b/fs/xfs/libxfs/xfs_dquot_buf.c > @@ -37,6 +37,7 @@ xfs_calc_dquots_per_chunk( > > xfs_failaddr_t > xfs_dquot_verify( > + struct xfs_vc *vc, > struct xfs_mount *mp, > xfs_disk_dquot_t *ddq, > xfs_dqid_t id, > @@ -95,6 +96,7 @@ xfs_dquot_verify( > > xfs_failaddr_t > xfs_dqblk_verify( > + struct xfs_vc *vc, > struct xfs_mount *mp, > struct xfs_dqblk *dqb, > xfs_dqid_t id, > @@ -104,7 +106,7 @@ xfs_dqblk_verify( > !uuid_equal(&dqb->dd_uuid, &mp->m_sb.sb_meta_uuid)) > return __this_address; > > - return xfs_dquot_verify(mp, &dqb->dd_diskdq, id, type); > + return xfs_dquot_verify(vc, mp, &dqb->dd_diskdq, id, type); > } > > /* > @@ -174,6 +176,7 @@ xfs_dquot_buf_verify_crc( > > STATIC xfs_failaddr_t > xfs_dquot_buf_verify( > + struct xfs_vc *vc, > struct xfs_mount *mp, > struct xfs_buf *bp, > bool readahead) > @@ -209,7 +212,7 @@ xfs_dquot_buf_verify( > if (i == 0) > id = be32_to_cpu(ddq->d_id); > > - fa = xfs_dqblk_verify(mp, &dqb[i], id + i, 0); > + fa = xfs_dqblk_verify(vc, mp, &dqb[i], id + i, 0); > if (fa) { > if (!readahead) > xfs_buf_verifier_error(bp, -EFSCORRUPTED, > @@ -224,22 +227,24 @@ xfs_dquot_buf_verify( > > static xfs_failaddr_t > xfs_dquot_buf_verify_struct( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > > - return xfs_dquot_buf_verify(mp, bp, false); > + return xfs_dquot_buf_verify(vc, mp, bp, false); > } > > static void > xfs_dquot_buf_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > > if (!xfs_dquot_buf_verify_crc(mp, bp, false)) > return; > - xfs_dquot_buf_verify(mp, bp, false); > + xfs_dquot_buf_verify(vc, mp, bp, false); > } > > /* > @@ -250,12 +255,13 @@ xfs_dquot_buf_read_verify( > */ > static void > xfs_dquot_buf_readahead_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > > if (!xfs_dquot_buf_verify_crc(mp, bp, true) || > - xfs_dquot_buf_verify(mp, bp, true) != NULL) { > + xfs_dquot_buf_verify(vc, mp, bp, true) != NULL) { > xfs_buf_ioerror(bp, -EIO); > bp->b_flags &= ~XBF_DONE; > } > @@ -268,11 +274,12 @@ xfs_dquot_buf_readahead_verify( > */ > static void > xfs_dquot_buf_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > > - xfs_dquot_buf_verify(mp, bp, false); > + xfs_dquot_buf_verify(vc, mp, bp, false); > } > > const struct xfs_buf_ops xfs_dquot_buf_ops = { > diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c > index a8f6db735d5d..1b2b3b63b207 100644 > --- a/fs/xfs/libxfs/xfs_ialloc.c > +++ b/fs/xfs/libxfs/xfs_ialloc.c > @@ -2497,6 +2497,7 @@ xfs_ialloc_log_agi( > > static xfs_failaddr_t > xfs_agi_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -2549,6 +2550,7 @@ xfs_agi_verify( > > static void > xfs_agi_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -2558,7 +2560,7 @@ xfs_agi_read_verify( > !xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_agi_verify(bp); > + fa = xfs_agi_verify(vc, bp); > if (XFS_TEST_ERROR(fa, mp, XFS_ERRTAG_IALLOC_READ_AGI)) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -2566,13 +2568,14 @@ xfs_agi_read_verify( > > static void > xfs_agi_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > struct xfs_buf_log_item *bip = bp->b_log_item; > xfs_failaddr_t fa; > > - fa = xfs_agi_verify(bp); > + fa = xfs_agi_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c > index 7fbf8af0b159..02d7dd5c265c 100644 > --- a/fs/xfs/libxfs/xfs_ialloc_btree.c > +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c > @@ -256,6 +256,7 @@ xfs_inobt_diff_two_keys( > > static xfs_failaddr_t > xfs_inobt_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -276,7 +277,7 @@ xfs_inobt_verify( > switch (block->bb_magic) { > case cpu_to_be32(XFS_IBT_CRC_MAGIC): > case cpu_to_be32(XFS_FIBT_CRC_MAGIC): > - fa = xfs_btree_sblock_v5hdr_verify(bp); > + fa = xfs_btree_sblock_v5hdr_verify(vc, bp); > if (fa) > return fa; > /* fall through */ > @@ -292,19 +293,20 @@ xfs_inobt_verify( > if (level >= mp->m_in_maxlevels) > return __this_address; > > - return xfs_btree_sblock_verify(bp, mp->m_inobt_mxr[level != 0]); > + return xfs_btree_sblock_verify(vc, bp, mp->m_inobt_mxr[level != 0]); > } > > static void > xfs_inobt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - if (!xfs_btree_sblock_verify_crc(bp)) > + if (!xfs_btree_sblock_verify_crc(vc, bp)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_inobt_verify(bp); > + fa = xfs_inobt_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -315,11 +317,12 @@ xfs_inobt_read_verify( > > static void > xfs_inobt_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - fa = xfs_inobt_verify(bp); > + fa = xfs_inobt_verify(vc, bp); > if (fa) { > trace_xfs_btree_corrupt(bp, _RET_IP_); > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c > index 09d9c8cfa4a0..7d9b4ea6eba9 100644 > --- a/fs/xfs/libxfs/xfs_inode_buf.c > +++ b/fs/xfs/libxfs/xfs_inode_buf.c > @@ -77,6 +77,7 @@ xfs_dinode_good_version( > */ > static void > xfs_inode_buf_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp, > bool readahead) > { > @@ -126,23 +127,26 @@ xfs_inode_buf_verify( > > static void > xfs_inode_buf_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - xfs_inode_buf_verify(bp, false); > + xfs_inode_buf_verify(vc, bp, false); > } > > static void > xfs_inode_buf_readahead_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - xfs_inode_buf_verify(bp, true); > + xfs_inode_buf_verify(vc, bp, true); > } > > static void > xfs_inode_buf_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > - xfs_inode_buf_verify(bp, false); > + xfs_inode_buf_verify(vc, bp, false); > } > > const struct xfs_buf_ops xfs_inode_buf_ops = { > @@ -376,6 +380,7 @@ xfs_log_dinode_to_disk( > > static xfs_failaddr_t > xfs_dinode_verify_fork( > + struct xfs_vc *vc, > struct xfs_dinode *dip, > struct xfs_mount *mp, > int whichfork) > @@ -417,6 +422,7 @@ xfs_dinode_verify_fork( > > static xfs_failaddr_t > xfs_dinode_verify_forkoff( > + struct xfs_vc *vc, > struct xfs_dinode *dip, > struct xfs_mount *mp) > { > @@ -442,6 +448,7 @@ xfs_dinode_verify_forkoff( > > xfs_failaddr_t > xfs_dinode_verify( > + struct xfs_vc *vc, > struct xfs_mount *mp, > xfs_ino_t ino, > struct xfs_dinode *dip) > @@ -496,7 +503,7 @@ xfs_dinode_verify( > return __this_address; > > /* check for illegal values of forkoff */ > - fa = xfs_dinode_verify_forkoff(dip, mp); > + fa = xfs_dinode_verify_forkoff(vc, dip, mp); > if (fa) > return fa; > > @@ -512,7 +519,7 @@ xfs_dinode_verify( > case S_IFREG: > case S_IFLNK: > case S_IFDIR: > - fa = xfs_dinode_verify_fork(dip, mp, XFS_DATA_FORK); > + fa = xfs_dinode_verify_fork(vc, dip, mp, XFS_DATA_FORK); > if (fa) > return fa; > break; > @@ -524,7 +531,7 @@ xfs_dinode_verify( > } > > if (XFS_DFORK_Q(dip)) { > - fa = xfs_dinode_verify_fork(dip, mp, XFS_ATTR_FORK); > + fa = xfs_dinode_verify_fork(vc, dip, mp, XFS_ATTR_FORK); > if (fa) > return fa; > } else { > @@ -546,7 +553,7 @@ xfs_dinode_verify( > } > > /* extent size hint validation */ > - fa = xfs_inode_validate_extsize(mp, be32_to_cpu(dip->di_extsize), > + fa = xfs_inode_validate_extsize(vc, mp, be32_to_cpu(dip->di_extsize), > mode, flags); > if (fa) > return fa; > @@ -575,7 +582,7 @@ xfs_dinode_verify( > return __this_address; > > /* COW extent size hint validation */ > - fa = xfs_inode_validate_cowextsize(mp, be32_to_cpu(dip->di_cowextsize), > + fa = xfs_inode_validate_cowextsize(vc, mp, be32_to_cpu(dip->di_cowextsize), > mode, flags, flags2); > if (fa) > return fa; > @@ -620,6 +627,7 @@ xfs_iread( > { > xfs_buf_t *bp; > xfs_dinode_t *dip; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > int error; > > @@ -649,7 +657,7 @@ xfs_iread( > return error; > > /* even unallocated inodes are verified */ > - fa = xfs_dinode_verify(mp, ip->i_ino, dip); > + fa = xfs_dinode_verify(&vc, mp, ip->i_ino, dip); > if (fa) { > xfs_inode_verifier_error(ip, -EFSCORRUPTED, "dinode", dip, > sizeof(*dip), fa); > @@ -728,6 +736,7 @@ xfs_iread( > */ > xfs_failaddr_t > xfs_inode_validate_extsize( > + struct xfs_vc *vc, > struct xfs_mount *mp, > uint32_t extsize, > uint16_t mode, > @@ -785,6 +794,7 @@ xfs_inode_validate_extsize( > */ > xfs_failaddr_t > xfs_inode_validate_cowextsize( > + struct xfs_vc *vc, > struct xfs_mount *mp, > uint32_t cowextsize, > uint16_t mode, > diff --git a/fs/xfs/libxfs/xfs_inode_buf.h b/fs/xfs/libxfs/xfs_inode_buf.h > index ab0f84165317..fceea886275f 100644 > --- a/fs/xfs/libxfs/xfs_inode_buf.h > +++ b/fs/xfs/libxfs/xfs_inode_buf.h > @@ -70,11 +70,11 @@ void xfs_inobp_check(struct xfs_mount *, struct xfs_buf *); > #define xfs_inobp_check(mp, bp) > #endif /* DEBUG */ > > -xfs_failaddr_t xfs_dinode_verify(struct xfs_mount *mp, xfs_ino_t ino, > +xfs_failaddr_t xfs_dinode_verify(struct xfs_vc *vc, struct xfs_mount *mp, xfs_ino_t ino, > struct xfs_dinode *dip); > -xfs_failaddr_t xfs_inode_validate_extsize(struct xfs_mount *mp, > +xfs_failaddr_t xfs_inode_validate_extsize(struct xfs_vc *vc, struct xfs_mount *mp, > uint32_t extsize, uint16_t mode, uint16_t flags); > -xfs_failaddr_t xfs_inode_validate_cowextsize(struct xfs_mount *mp, > +xfs_failaddr_t xfs_inode_validate_cowextsize(struct xfs_vc *vc, struct xfs_mount *mp, > uint32_t cowextsize, uint16_t mode, uint16_t flags, > uint64_t flags2); > > diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c > index f9acf1d436f6..49dd81b0728f 100644 > --- a/fs/xfs/libxfs/xfs_inode_fork.c > +++ b/fs/xfs/libxfs/xfs_inode_fork.c > @@ -233,10 +233,11 @@ xfs_iformat_extents( > > xfs_iext_first(ifp, &icur); > for (i = 0; i < nex; i++, dp++) { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > xfs_bmbt_disk_get_all(dp, &new); > - fa = xfs_bmap_validate_extent(ip, whichfork, &new); > + fa = xfs_bmap_validate_extent(&vc, ip, whichfork, &new); > if (fa) { > xfs_inode_verifier_error(ip, -EFSCORRUPTED, > "xfs_iformat_extents(2)", > @@ -562,7 +563,7 @@ xfs_iextents_copy( > for_each_xfs_iext(ifp, &icur, &rec) { > if (isnullstartblock(rec.br_startblock)) > continue; > - ASSERT(xfs_bmap_validate_extent(ip, whichfork, &rec) == NULL); > + ASSERT(xfs_bmap_validate_extent(NULL, ip, whichfork, &rec) == NULL); > xfs_bmbt_disk_set_all(dp, &rec); > trace_xfs_write_extent(ip, &icur, state, _RET_IP_); > copied += sizeof(struct xfs_bmbt_rec); > @@ -701,6 +702,7 @@ struct xfs_ifork_ops xfs_default_ifork_ops = { > /* Verify the inline contents of the data fork of an inode. */ > xfs_failaddr_t > xfs_ifork_verify_data( > + struct xfs_vc *vc, > struct xfs_inode *ip, > struct xfs_ifork_ops *ops) > { > @@ -711,9 +713,9 @@ xfs_ifork_verify_data( > /* Check the inline data fork if there is one. */ > switch (VFS_I(ip)->i_mode & S_IFMT) { > case S_IFDIR: > - return ops->verify_dir(ip); > + return ops->verify_dir(vc, ip); > case S_IFLNK: > - return ops->verify_symlink(ip); > + return ops->verify_symlink(vc, ip); > default: > return NULL; > } > @@ -722,6 +724,7 @@ xfs_ifork_verify_data( > /* Verify the inline contents of the attr fork of an inode. */ > xfs_failaddr_t > xfs_ifork_verify_attr( > + struct xfs_vc *vc, > struct xfs_inode *ip, > struct xfs_ifork_ops *ops) > { > @@ -730,5 +733,5 @@ xfs_ifork_verify_attr( > return NULL; > if (!XFS_IFORK_PTR(ip, XFS_ATTR_FORK)) > return __this_address; > - return ops->verify_attr(ip); > + return ops->verify_attr(vc, ip); > } > diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h > index 60361d2d74a1..b2f67389304c 100644 > --- a/fs/xfs/libxfs/xfs_inode_fork.h > +++ b/fs/xfs/libxfs/xfs_inode_fork.h > @@ -174,7 +174,7 @@ extern struct kmem_zone *xfs_ifork_zone; > > extern void xfs_ifork_init_cow(struct xfs_inode *ip); > > -typedef xfs_failaddr_t (*xfs_ifork_verifier_t)(struct xfs_inode *); > +typedef xfs_failaddr_t (*xfs_ifork_verifier_t)(struct xfs_vc *vc, struct xfs_inode *); > > struct xfs_ifork_ops { > xfs_ifork_verifier_t verify_symlink; > @@ -183,9 +183,9 @@ struct xfs_ifork_ops { > }; > extern struct xfs_ifork_ops xfs_default_ifork_ops; > > -xfs_failaddr_t xfs_ifork_verify_data(struct xfs_inode *ip, > +xfs_failaddr_t xfs_ifork_verify_data(struct xfs_vc *vc, struct xfs_inode *ip, > struct xfs_ifork_ops *ops); > -xfs_failaddr_t xfs_ifork_verify_attr(struct xfs_inode *ip, > +xfs_failaddr_t xfs_ifork_verify_attr(struct xfs_vc *vc, struct xfs_inode *ip, > struct xfs_ifork_ops *ops); > > #endif /* __XFS_INODE_FORK_H__ */ > diff --git a/fs/xfs/libxfs/xfs_quota_defs.h b/fs/xfs/libxfs/xfs_quota_defs.h > index 4bfdd5f4c6af..d6af05e0a6f1 100644 > --- a/fs/xfs/libxfs/xfs_quota_defs.h > +++ b/fs/xfs/libxfs/xfs_quota_defs.h > @@ -137,9 +137,9 @@ typedef uint16_t xfs_qwarncnt_t; > (XFS_QMOPT_UQUOTA | XFS_QMOPT_PQUOTA | XFS_QMOPT_GQUOTA) > #define XFS_QMOPT_RESBLK_MASK (XFS_QMOPT_RES_REGBLKS | XFS_QMOPT_RES_RTBLKS) > > -extern xfs_failaddr_t xfs_dquot_verify(struct xfs_mount *mp, > +extern xfs_failaddr_t xfs_dquot_verify(struct xfs_vc *vc, struct xfs_mount *mp, > struct xfs_disk_dquot *ddq, xfs_dqid_t id, uint type); > -extern xfs_failaddr_t xfs_dqblk_verify(struct xfs_mount *mp, > +extern xfs_failaddr_t xfs_dqblk_verify(struct xfs_vc *vc, struct xfs_mount *mp, > struct xfs_dqblk *dqb, xfs_dqid_t id, uint type); > extern int xfs_calc_dquots_per_chunk(unsigned int nbblks); > extern int xfs_dqblk_repair(struct xfs_mount *mp, struct xfs_dqblk *dqb, > diff --git a/fs/xfs/libxfs/xfs_refcount_btree.c b/fs/xfs/libxfs/xfs_refcount_btree.c > index 1aaa01c97517..125b536538ec 100644 > --- a/fs/xfs/libxfs/xfs_refcount_btree.c > +++ b/fs/xfs/libxfs/xfs_refcount_btree.c > @@ -203,6 +203,7 @@ xfs_refcountbt_diff_two_keys( > > STATIC xfs_failaddr_t > xfs_refcountbt_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -216,7 +217,7 @@ xfs_refcountbt_verify( > > if (!xfs_sb_version_hasreflink(&mp->m_sb)) > return __this_address; > - fa = xfs_btree_sblock_v5hdr_verify(bp); > + fa = xfs_btree_sblock_v5hdr_verify(vc, bp); > if (fa) > return fa; > > @@ -227,19 +228,20 @@ xfs_refcountbt_verify( > } else if (level >= mp->m_refc_maxlevels) > return __this_address; > > - return xfs_btree_sblock_verify(bp, mp->m_refc_mxr[level != 0]); > + return xfs_btree_sblock_verify(vc, bp, mp->m_refc_mxr[level != 0]); > } > > STATIC void > xfs_refcountbt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - if (!xfs_btree_sblock_verify_crc(bp)) > + if (!xfs_btree_sblock_verify_crc(vc, bp)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_refcountbt_verify(bp); > + fa = xfs_refcountbt_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -250,11 +252,12 @@ xfs_refcountbt_read_verify( > > STATIC void > xfs_refcountbt_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - fa = xfs_refcountbt_verify(bp); > + fa = xfs_refcountbt_verify(vc, bp); > if (fa) { > trace_xfs_btree_corrupt(bp, _RET_IP_); > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c > index f79cf040d745..f8828854ca2f 100644 > --- a/fs/xfs/libxfs/xfs_rmap_btree.c > +++ b/fs/xfs/libxfs/xfs_rmap_btree.c > @@ -290,6 +290,7 @@ xfs_rmapbt_diff_two_keys( > > static xfs_failaddr_t > xfs_rmapbt_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -315,7 +316,7 @@ xfs_rmapbt_verify( > > if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) > return __this_address; > - fa = xfs_btree_sblock_v5hdr_verify(bp); > + fa = xfs_btree_sblock_v5hdr_verify(vc, bp); > if (fa) > return fa; > > @@ -326,19 +327,20 @@ xfs_rmapbt_verify( > } else if (level >= mp->m_rmap_maxlevels) > return __this_address; > > - return xfs_btree_sblock_verify(bp, mp->m_rmap_mxr[level != 0]); > + return xfs_btree_sblock_verify(vc, bp, mp->m_rmap_mxr[level != 0]); > } > > static void > xfs_rmapbt_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - if (!xfs_btree_sblock_verify_crc(bp)) > + if (!xfs_btree_sblock_verify_crc(vc, bp)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_rmapbt_verify(bp); > + fa = xfs_rmapbt_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -349,11 +351,12 @@ xfs_rmapbt_read_verify( > > static void > xfs_rmapbt_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > xfs_failaddr_t fa; > > - fa = xfs_rmapbt_verify(bp); > + fa = xfs_rmapbt_verify(vc, bp); > if (fa) { > trace_xfs_btree_corrupt(bp, _RET_IP_); > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > diff --git a/fs/xfs/libxfs/xfs_rtbitmap.c b/fs/xfs/libxfs/xfs_rtbitmap.c > index b228c821bae6..6a0a953553b9 100644 > --- a/fs/xfs/libxfs/xfs_rtbitmap.c > +++ b/fs/xfs/libxfs/xfs_rtbitmap.c > @@ -36,6 +36,7 @@ > */ > static void > xfs_rtbuf_verify_read( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > return; > @@ -43,6 +44,7 @@ xfs_rtbuf_verify_read( > > static void > xfs_rtbuf_verify_write( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > return; > diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c > index b5a82acd7dfe..0f8197c368a9 100644 > --- a/fs/xfs/libxfs/xfs_sb.c > +++ b/fs/xfs/libxfs/xfs_sb.c > @@ -681,6 +681,7 @@ xfs_sb_to_disk( > */ > static void > xfs_sb_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_sb sb; > @@ -732,13 +733,14 @@ xfs_sb_read_verify( > */ > static void > xfs_sb_quiet_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_dsb *dsb = XFS_BUF_TO_SBP(bp); > > if (dsb->sb_magicnum == cpu_to_be32(XFS_SB_MAGIC)) { > /* XFS filesystem, verify noisily! */ > - xfs_sb_read_verify(bp); > + xfs_sb_read_verify(vc, bp); > return; > } > /* quietly fail */ > @@ -747,6 +749,7 @@ xfs_sb_quiet_read_verify( > > static void > xfs_sb_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_sb sb; > diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h > index 1c5debe748f0..c10d02addaa1 100644 > --- a/fs/xfs/libxfs/xfs_shared.h > +++ b/fs/xfs/libxfs/xfs_shared.h > @@ -132,6 +132,6 @@ bool xfs_symlink_hdr_ok(xfs_ino_t ino, uint32_t offset, > uint32_t size, struct xfs_buf *bp); > void xfs_symlink_local_to_remote(struct xfs_trans *tp, struct xfs_buf *bp, > struct xfs_inode *ip, struct xfs_ifork *ifp); > -xfs_failaddr_t xfs_symlink_shortform_verify(struct xfs_inode *ip); > +xfs_failaddr_t xfs_symlink_shortform_verify(struct xfs_vc *vc, struct xfs_inode *ip); > > #endif /* __XFS_SHARED_H__ */ > diff --git a/fs/xfs/libxfs/xfs_symlink_remote.c b/fs/xfs/libxfs/xfs_symlink_remote.c > index 95374ab2dee7..e0ff80797942 100644 > --- a/fs/xfs/libxfs/xfs_symlink_remote.c > +++ b/fs/xfs/libxfs/xfs_symlink_remote.c > @@ -88,6 +88,7 @@ xfs_symlink_hdr_ok( > > static xfs_failaddr_t > xfs_symlink_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -114,6 +115,7 @@ xfs_symlink_verify( > > static void > xfs_symlink_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -126,7 +128,7 @@ xfs_symlink_read_verify( > if (!xfs_buf_verify_cksum(bp, XFS_SYMLINK_CRC_OFF)) > xfs_verifier_error(bp, -EFSBADCRC, __this_address); > else { > - fa = xfs_symlink_verify(bp); > + fa = xfs_symlink_verify(vc, bp); > if (fa) > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > } > @@ -134,6 +136,7 @@ xfs_symlink_read_verify( > > static void > xfs_symlink_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_mount *mp = bp->b_target->bt_mount; > @@ -144,7 +147,7 @@ xfs_symlink_write_verify( > if (!xfs_sb_version_hascrc(&mp->m_sb)) > return; > > - fa = xfs_symlink_verify(bp); > + fa = xfs_symlink_verify(vc, bp); > if (fa) { > xfs_verifier_error(bp, -EFSCORRUPTED, fa); > return; > @@ -202,6 +205,7 @@ xfs_symlink_local_to_remote( > /* Verify the consistency of an inline symlink. */ > xfs_failaddr_t > xfs_symlink_shortform_verify( > + struct xfs_vc *vc, > struct xfs_inode *ip) > { > char *sfp; > diff --git a/fs/xfs/libxfs/xfs_types.h b/fs/xfs/libxfs/xfs_types.h > index b9e6c89284c3..6c27103522a9 100644 > --- a/fs/xfs/libxfs/xfs_types.h > +++ b/fs/xfs/libxfs/xfs_types.h > @@ -41,6 +41,10 @@ typedef int64_t xfs_sfiloff_t; /* signed block number in a file */ > */ > typedef void * xfs_failaddr_t; > > +struct xfs_vc { > + xfs_failaddr_t fa; > +}; > + > /* > * Null values for the types. > */ > diff --git a/fs/xfs/scrub/btree.c b/fs/xfs/scrub/btree.c > index 4ae959f7ad2c..8780dcb479de 100644 > --- a/fs/xfs/scrub/btree.c > +++ b/fs/xfs/scrub/btree.c > @@ -490,6 +490,7 @@ xchk_btree_get_block( > struct xfs_btree_block **pblock, > struct xfs_buf **pbp) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t failed_at; > int error; > > @@ -503,10 +504,10 @@ xchk_btree_get_block( > > xfs_btree_get_block(bs->cur, level, pbp); > if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS) > - failed_at = __xfs_btree_check_lblock(bs->cur, *pblock, > + failed_at = __xfs_btree_check_lblock(&vc, bs->cur, *pblock, > level, *pbp); > else > - failed_at = __xfs_btree_check_sblock(bs->cur, *pblock, > + failed_at = __xfs_btree_check_sblock(&vc, bs->cur, *pblock, > level, *pbp); > if (failed_at) { > xchk_btree_set_corrupt(bs->sc, bs->cur, level); > diff --git a/fs/xfs/scrub/common.c b/fs/xfs/scrub/common.c > index 346b02abccf7..1571e66e657a 100644 > --- a/fs/xfs/scrub/common.c > +++ b/fs/xfs/scrub/common.c > @@ -791,6 +791,7 @@ xchk_buffer_recheck( > struct xfs_scrub *sc, > struct xfs_buf *bp) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > if (bp->b_ops == NULL) { > @@ -801,7 +802,7 @@ xchk_buffer_recheck( > xchk_set_incomplete(sc); > return; > } > - fa = bp->b_ops->verify_struct(bp); > + fa = bp->b_ops->verify_struct(&vc, bp); > if (!fa) > return; > sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT; > diff --git a/fs/xfs/scrub/dabtree.c b/fs/xfs/scrub/dabtree.c > index f1260b4bfdee..4626a208d132 100644 > --- a/fs/xfs/scrub/dabtree.c > +++ b/fs/xfs/scrub/dabtree.c > @@ -177,6 +177,7 @@ xchk_da_btree_ptr_ok( > */ > static void > xchk_da_btree_read_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_da_blkinfo *info = bp->b_addr; > @@ -185,7 +186,7 @@ xchk_da_btree_read_verify( > case XFS_DIR2_LEAF1_MAGIC: > case XFS_DIR3_LEAF1_MAGIC: > bp->b_ops = &xfs_dir3_leaf1_buf_ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(vc, bp); > return; > default: > /* > @@ -193,12 +194,13 @@ xchk_da_btree_read_verify( > * DA*_NODE, ATTR*_LEAF, and DIR*_LEAFN blocks. > */ > bp->b_ops = &xfs_da3_node_buf_ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(vc, bp); > return; > } > } > static void > xchk_da_btree_write_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_da_blkinfo *info = bp->b_addr; > @@ -207,7 +209,7 @@ xchk_da_btree_write_verify( > case XFS_DIR2_LEAF1_MAGIC: > case XFS_DIR3_LEAF1_MAGIC: > bp->b_ops = &xfs_dir3_leaf1_buf_ops; > - bp->b_ops->verify_write(bp); > + bp->b_ops->verify_write(vc, bp); > return; > default: > /* > @@ -215,12 +217,13 @@ xchk_da_btree_write_verify( > * DA*_NODE, ATTR*_LEAF, and DIR*_LEAFN blocks. > */ > bp->b_ops = &xfs_da3_node_buf_ops; > - bp->b_ops->verify_write(bp); > + bp->b_ops->verify_write(vc, bp); > return; > } > } > static void * > xchk_da_btree_verify( > + struct xfs_vc *vc, > struct xfs_buf *bp) > { > struct xfs_da_blkinfo *info = bp->b_addr; > @@ -229,10 +232,10 @@ xchk_da_btree_verify( > case XFS_DIR2_LEAF1_MAGIC: > case XFS_DIR3_LEAF1_MAGIC: > bp->b_ops = &xfs_dir3_leaf1_buf_ops; > - return bp->b_ops->verify_struct(bp); > + return bp->b_ops->verify_struct(vc, bp); > default: > bp->b_ops = &xfs_da3_node_buf_ops; > - return bp->b_ops->verify_struct(bp); > + return bp->b_ops->verify_struct(vc, bp); > } > } > > diff --git a/fs/xfs/scrub/inode.c b/fs/xfs/scrub/inode.c > index e386c9b0b4ab..f8c6869b8fc6 100644 > --- a/fs/xfs/scrub/inode.c > +++ b/fs/xfs/scrub/inode.c > @@ -83,9 +83,10 @@ xchk_inode_extsize( > uint16_t mode, > uint16_t flags) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = xfs_inode_validate_extsize(sc->mp, be32_to_cpu(dip->di_extsize), > + fa = xfs_inode_validate_extsize(&vc, sc->mp, be32_to_cpu(dip->di_extsize), > mode, flags); > if (fa) > xchk_ino_set_corrupt(sc, ino); > @@ -106,9 +107,10 @@ xchk_inode_cowextsize( > uint16_t flags, > uint64_t flags2) > { > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = xfs_inode_validate_cowextsize(sc->mp, > + fa = xfs_inode_validate_cowextsize(&vc, sc->mp, > be32_to_cpu(dip->di_cowextsize), mode, flags, > flags2); > if (fa) > diff --git a/fs/xfs/scrub/repair.c b/fs/xfs/scrub/repair.c > index 4fc0a5ea7673..dc9b5762d1ac 100644 > --- a/fs/xfs/scrub/repair.c > +++ b/fs/xfs/scrub/repair.c > @@ -766,11 +766,13 @@ xrep_findroot_block( > if (bp->b_ops != fab->buf_ops) > goto out; > } else { > + struct xfs_vc vc = { 0 }; > + > ASSERT(!xfs_trans_buf_is_dirty(bp)); > if (!uuid_equal(&btblock->bb_u.s.bb_uuid, > &mp->m_sb.sb_meta_uuid)) > goto out; > - fab->buf_ops->verify_read(bp); > + fab->buf_ops->verify_read(&vc, bp); > if (bp->b_error) { > bp->b_error = 0; > goto out; > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c > index b21ea2ba768d..b46e22c7a8c8 100644 > --- a/fs/xfs/xfs_buf.c > +++ b/fs/xfs/xfs_buf.c > @@ -786,6 +786,8 @@ xfs_buf_ensure_ops( > struct xfs_buf *bp, > const struct xfs_buf_ops *ops) > { > + struct xfs_vc vc = { 0 }; Indentation? --D > + > ASSERT(bp->b_flags & XBF_DONE); > ASSERT(bp->b_error == 0); > > @@ -793,7 +795,7 @@ xfs_buf_ensure_ops( > return 0; > > bp->b_ops = ops; > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(&vc, bp); > if (bp->b_error) > bp->b_flags &= ~XBF_DONE; > return bp->b_error; > @@ -1228,8 +1230,10 @@ xfs_buf_ioend( > > /* Only validate buffers that were read without errors */ > if (read && !bp->b_error && bp->b_ops) { > + struct xfs_vc vc = { 0 }; > + > ASSERT(!bp->b_iodone); > - bp->b_ops->verify_read(bp); > + bp->b_ops->verify_read(&vc, bp); > } > > if (!bp->b_error) > @@ -1447,7 +1451,9 @@ _xfs_buf_ioapply( > * the IO should not be dispatched. > */ > if (bp->b_ops) { > - bp->b_ops->verify_write(bp); > + struct xfs_vc vc = { 0 }; > + > + bp->b_ops->verify_write(&vc, bp); > if (bp->b_error) { > xfs_force_shutdown(bp->b_target->bt_mount, > SHUTDOWN_CORRUPT_INCORE); > diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h > index 5015255b5ede..d1c6c92b7104 100644 > --- a/fs/xfs/xfs_buf.h > +++ b/fs/xfs/xfs_buf.h > @@ -125,9 +125,9 @@ struct xfs_buf_map { > > struct xfs_buf_ops { > char *name; > - void (*verify_read)(struct xfs_buf *); > - void (*verify_write)(struct xfs_buf *); > - xfs_failaddr_t (*verify_struct)(struct xfs_buf *bp); > + void (*verify_read)(struct xfs_vc *vc, struct xfs_buf *); > + void (*verify_write)(struct xfs_vc *vc, struct xfs_buf *); > + xfs_failaddr_t (*verify_struct)(struct xfs_vc *vc, struct xfs_buf *bp); > }; > > typedef struct xfs_buf { > diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c > index 87e6dd5326d5..14b386c584b6 100644 > --- a/fs/xfs/xfs_dquot.c > +++ b/fs/xfs/xfs_dquot.c > @@ -1074,6 +1074,7 @@ xfs_qm_dqflush( > struct xfs_buf *bp; > struct xfs_dqblk *dqb; > struct xfs_disk_dquot *ddqp; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > int error; > > @@ -1122,7 +1123,7 @@ xfs_qm_dqflush( > /* > * A simple sanity check in case we got a corrupted dquot. > */ > - fa = xfs_dqblk_verify(mp, dqb, be32_to_cpu(ddqp->d_id), 0); > + fa = xfs_dqblk_verify(&vc, mp, dqb, be32_to_cpu(ddqp->d_id), 0); > if (fa) { > xfs_alert(mp, "corrupt dquot ID 0x%x in memory at %pS", > be32_to_cpu(ddqp->d_id), fa); > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 05db9540e459..d2fd4d4b7864 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -3416,9 +3416,10 @@ xfs_inode_verify_forks( > struct xfs_inode *ip) > { > struct xfs_ifork *ifp; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > - fa = xfs_ifork_verify_data(ip, &xfs_default_ifork_ops); > + fa = xfs_ifork_verify_data(&vc, ip, &xfs_default_ifork_ops); > if (fa) { > ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); > xfs_inode_verifier_error(ip, -EFSCORRUPTED, "data fork", > @@ -3426,7 +3427,7 @@ xfs_inode_verify_forks( > return false; > } > > - fa = xfs_ifork_verify_attr(ip, &xfs_default_ifork_ops); > + fa = xfs_ifork_verify_attr(&vc, ip, &xfs_default_ifork_ops); > if (fa) { > ifp = XFS_IFORK_PTR(ip, XFS_ATTR_FORK); > xfs_inode_verifier_error(ip, -EFSCORRUPTED, "attr fork", > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 1fc9e9042e0e..bcafd3961d20 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -2650,6 +2650,7 @@ xlog_recover_do_reg_buffer( > int i; > int bit; > int nbits; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > trace_xfs_log_recover_buf_reg_buf(mp->m_log, buf_f); > @@ -2699,7 +2700,7 @@ xlog_recover_do_reg_buffer( > item->ri_buf[i].i_len, __func__); > goto next; > } > - fa = xfs_dquot_verify(mp, item->ri_buf[i].i_addr, > + fa = xfs_dquot_verify(&vc, mp, item->ri_buf[i].i_addr, > -1, 0); > if (fa) { > xfs_alert(mp, > @@ -3308,6 +3309,7 @@ xlog_recover_dquot_pass2( > xfs_mount_t *mp = log->l_mp; > xfs_buf_t *bp; > struct xfs_disk_dquot *ddq, *recddq; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > int error; > xfs_dq_logformat_t *dq_f; > @@ -3351,7 +3353,7 @@ xlog_recover_dquot_pass2( > */ > dq_f = item->ri_buf[0].i_addr; > ASSERT(dq_f); > - fa = xfs_dquot_verify(mp, recddq, dq_f->qlf_id, 0); > + fa = xfs_dquot_verify(&vc, mp, recddq, dq_f->qlf_id, 0); > if (fa) { > xfs_alert(mp, "corrupt dquot ID 0x%x in log at %pS", > dq_f->qlf_id, fa); > diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c > index 52ed7904df10..09cd6e971074 100644 > --- a/fs/xfs/xfs_qm.c > +++ b/fs/xfs/xfs_qm.c > @@ -833,6 +833,7 @@ xfs_qm_reset_dqcounts( > { > struct xfs_dqblk *dqb; > int j; > + struct xfs_vc vc = { 0 }; > xfs_failaddr_t fa; > > trace_xfs_reset_dqcounts(bp, _RET_IP_); > @@ -858,7 +859,7 @@ xfs_qm_reset_dqcounts( > * find uninitialised dquot blks. See comment in > * xfs_dquot_verify. > */ > - fa = xfs_dqblk_verify(mp, &dqb[j], id + j, type); > + fa = xfs_dqblk_verify(&vc, mp, &dqb[j], id + j, type); > if (fa) > xfs_dqblk_repair(mp, &dqb[j], id + j, type); > > -- > 2.17.0 > >