• Brian Foster's avatar
    xfs: distinguish between inobt and finobt magic values · 8473fee3
    Brian Foster authored
    The inode btree verifier code is shared between the inode btree and
    free inode btree because the underlying metadata formats are
    essentially equivalent. A side effect of this is that the verifier
    cannot determine whether a particular btree block should have an
    inobt or finobt magic value.
    
    This logic allows an unfortunate xfs_repair bug to escape detection
    where certain level > 0 nodes of the finobt are stamped with inobt
    magic by xfs_repair finobt reconstruction. This is fortunately not a
    severe problem since the inode btree magic values do not contribute
    to any changes in kernel behavior, but we do need a means to detect
    and prevent this problem in the future.
    
    Add a field to xfs_buf_ops to store the v4 and v5 superblock magic
    values expected by a particular verifier. Add a helper to check an
    on-disk magic value against the value expected by the verifier. Call
    the helper from the shared [f]inobt verifier code for magic value
    verification. This ensures that the inode btree blocks each have the
    appropriate magic value based on specific tree type and superblock
    version.
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    8473fee3
xfs_buf.c 52.8 KB