xfs: make xfs_btree_magic more generic
authorEric Sandeen <sandeen@sandeen.net>
Sat, 28 Jan 2017 07:16:38 +0000 (23:16 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 31 Jan 2017 00:32:24 +0000 (16:32 -0800)
Right now the xfs_btree_magic() define takes only a cursor;
change this to take crc and btnum args to make it more generically
useful, and move to a function.

This will allow xfs_btree_init_block_int callers which don't
have a cursor to make use of the xfs_magics array, which will
happen in the next patch.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/libxfs/xfs_btree.c
fs/xfs/libxfs/xfs_btree.h

index c91823c202b6f1fac7469de501ebf3de29586cd1..18afab3154454021908840fc01d924f05fe5f84b 100644 (file)
@@ -50,8 +50,18 @@ static const __uint32_t xfs_magics[2][XFS_BTNUM_MAX] = {
          XFS_BMAP_CRC_MAGIC, XFS_IBT_CRC_MAGIC, XFS_FIBT_CRC_MAGIC,
          XFS_REFC_CRC_MAGIC }
 };
-#define xfs_btree_magic(cur) \
-       xfs_magics[!!((cur)->bc_flags & XFS_BTREE_CRC_BLOCKS)][cur->bc_btnum]
+
+__uint32_t
+xfs_btree_magic(
+       int                     crc,
+       xfs_btnum_t             btnum)
+{
+       __uint32_t              magic = xfs_magics[crc][btnum];
+
+       /* Ensure we asked for crc for crc-only magics. */
+       ASSERT(magic != 0);
+       return magic;
+}
 
 STATIC int                             /* error (0 or EFSCORRUPTED) */
 xfs_btree_check_lblock(
@@ -62,10 +72,13 @@ xfs_btree_check_lblock(
 {
        int                     lblock_ok = 1; /* block passes checks */
        struct xfs_mount        *mp;    /* file system mount point */
+       xfs_btnum_t             btnum = cur->bc_btnum;
+       int                     crc;
 
        mp = cur->bc_mp;
+       crc = xfs_sb_version_hascrc(&mp->m_sb);
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (crc) {
                lblock_ok = lblock_ok &&
                        uuid_equal(&block->bb_u.l.bb_uuid,
                                   &mp->m_sb.sb_meta_uuid) &&
@@ -74,7 +87,7 @@ xfs_btree_check_lblock(
        }
 
        lblock_ok = lblock_ok &&
-               be32_to_cpu(block->bb_magic) == xfs_btree_magic(cur) &&
+               be32_to_cpu(block->bb_magic) == xfs_btree_magic(crc, btnum) &&
                be16_to_cpu(block->bb_level) == level &&
                be16_to_cpu(block->bb_numrecs) <=
                        cur->bc_ops->get_maxrecs(cur, level) &&
@@ -110,13 +123,16 @@ xfs_btree_check_sblock(
        struct xfs_agf          *agf;   /* ag. freespace structure */
        xfs_agblock_t           agflen; /* native ag. freespace length */
        int                     sblock_ok = 1; /* block passes checks */
+       xfs_btnum_t             btnum = cur->bc_btnum;
+       int                     crc;
 
        mp = cur->bc_mp;
+       crc = xfs_sb_version_hascrc(&mp->m_sb);
        agbp = cur->bc_private.a.agbp;
        agf = XFS_BUF_TO_AGF(agbp);
        agflen = be32_to_cpu(agf->agf_length);
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (crc) {
                sblock_ok = sblock_ok &&
                        uuid_equal(&block->bb_u.s.bb_uuid,
                                   &mp->m_sb.sb_meta_uuid) &&
@@ -125,7 +141,7 @@ xfs_btree_check_sblock(
        }
 
        sblock_ok = sblock_ok &&
-               be32_to_cpu(block->bb_magic) == xfs_btree_magic(cur) &&
+               be32_to_cpu(block->bb_magic) == xfs_btree_magic(crc, btnum) &&
                be16_to_cpu(block->bb_level) == level &&
                be16_to_cpu(block->bb_numrecs) <=
                        cur->bc_ops->get_maxrecs(cur, level) &&
@@ -1142,7 +1158,9 @@ xfs_btree_init_block_cur(
        int                     level,
        int                     numrecs)
 {
-       __u64 owner;
+       __u64                   owner;
+       int                     crc = xfs_sb_version_hascrc(&cur->bc_mp->m_sb);
+       xfs_btnum_t             btnum = cur->bc_btnum;
 
        /*
         * we can pull the owner from the cursor right now as the different
@@ -1156,7 +1174,7 @@ xfs_btree_init_block_cur(
                owner = cur->bc_private.a.agno;
 
        xfs_btree_init_block_int(cur->bc_mp, XFS_BUF_TO_BLOCK(bp), bp->b_bn,
-                                xfs_btree_magic(cur), level, numrecs,
+                                xfs_btree_magic(crc, btnum), level, numrecs,
                                 owner, cur->bc_flags);
 }
 
index b69b947c4c1bd5571efe62df2afa18c9d6a52ae7..95ea6ed0c14b5ab5d49434d0f7c8ecc50fee6204 100644 (file)
@@ -76,6 +76,8 @@ union xfs_btree_rec {
 #define        XFS_BTNUM_RMAP  ((xfs_btnum_t)XFS_BTNUM_RMAPi)
 #define        XFS_BTNUM_REFC  ((xfs_btnum_t)XFS_BTNUM_REFCi)
 
+__uint32_t xfs_btree_magic(int crc, xfs_btnum_t btnum);
+
 /*
  * For logging record fields.
  */