• Darrick J. Wong's avatar
    xfs: fix imprecise logic in xchk_btree_check_block_owner · c0afba9a
    Darrick J. Wong authored
    A reviewer was confused by the init_sa logic in this function.  Upon
    checking the logic, I discovered that the code is imprecise.  What we
    want to do here is check that there is an ownership record in the rmap
    btree for the AG that contains a btree block.
    
    For an inode-rooted btree (e.g. the bmbt) the per-AG btree cursors have
    not been initialized because inode btrees can span multiple AGs.
    Therefore, we must initialize the per-AG btree cursors in sc->sa before
    proceeding.  That is what init_sa controls, and hence the logic should
    be gated on XFS_BTREE_ROOT_IN_INODE, not XFS_BTREE_LONG_PTRS.
    
    In practice, ROOT_IN_INODE and LONG_PTRS are coincident so this hasn't
    mattered.  However, we're about to refactor both of those flags into
    separate btree_ops fields so we want this the logic to make sense
    afterwards.
    
    Fixes: 858333dc ("xfs: check btree block ownership with bnobt/rmapbt when scrubbing btree")
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    c0afba9a
btree.c 21 KB