]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: remove boilerplate around xfs_btree_init_block
authorEric Sandeen <sandeen@sandeen.net>
Tue, 4 Apr 2017 20:37:43 +0000 (15:37 -0500)
committerEric Sandeen <sandeen@redhat.com>
Tue, 4 Apr 2017 20:37:43 +0000 (15:37 -0500)
Source kernel commit: b6f41e448277ff080fea734b93121e6cd7513f0c
(minimal changes made to mkfs & repair code for merge)

Now that xfs_btree_init_block_int is able to determine crc
status from the passed-in mp, we can determine the proper
magic as well if we are given a btree number, rather than
an explicit magic value.

Change xfs_btree_init_block[_int] callers to pass in the
btree number, and let xfs_btree_init_block_int use the
xfs_magics array via the xfs_btree_magic macro to determine
which magic value is needed.  This makes all of the
if (crc) / else stanzas identical, and the if/else can be
removed, leading to a single, common init_block call.

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>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_bmap.c
libxfs/xfs_bmap_btree.c
libxfs/xfs_btree.c
libxfs/xfs_btree.h
mkfs/xfs_mkfs.c
repair/phase5.c

index 270fea92e130901c15b015bebabaaf800f08d26a..3e234ff2a0e08ed8d98ebf5c2af3f3b6f74d4522 100644 (file)
@@ -731,15 +731,9 @@ xfs_bmap_extents_to_btree(
         * Fill in the root.
         */
        block = ifp->if_broot;
-       if (xfs_sb_version_hascrc(&mp->m_sb))
-               xfs_btree_init_block_int(mp, block, XFS_BUF_DADDR_NULL,
-                                XFS_BMAP_CRC_MAGIC, 1, 1, ip->i_ino,
+       xfs_btree_init_block_int(mp, block, XFS_BUF_DADDR_NULL,
+                                XFS_BTNUM_BMAP, 1, 1, ip->i_ino,
                                 XFS_BTREE_LONG_PTRS);
-       else
-               xfs_btree_init_block_int(mp, block, XFS_BUF_DADDR_NULL,
-                                XFS_BMAP_MAGIC, 1, 1, ip->i_ino,
-                                XFS_BTREE_LONG_PTRS);
-
        /*
         * Need a cursor.  Can't allocate until bb_level is filled in.
         */
@@ -808,13 +802,8 @@ try_another_ag:
         */
        abp->b_ops = &xfs_bmbt_buf_ops;
        ablock = XFS_BUF_TO_BLOCK(abp);
-       if (xfs_sb_version_hascrc(&mp->m_sb))
-               xfs_btree_init_block_int(mp, ablock, abp->b_bn,
-                               XFS_BMAP_CRC_MAGIC, 0, 0, ip->i_ino,
-                               XFS_BTREE_LONG_PTRS);
-       else
-               xfs_btree_init_block_int(mp, ablock, abp->b_bn,
-                               XFS_BMAP_MAGIC, 0, 0, ip->i_ino,
+       xfs_btree_init_block_int(mp, ablock, abp->b_bn,
+                               XFS_BTNUM_BMAP, 0, 0, ip->i_ino,
                                XFS_BTREE_LONG_PTRS);
 
        arp = XFS_BMBT_REC_ADDR(mp, ablock, 1);
index b01d61dd42297a6aea37d28335734c29d6a68854..00576e29b9ea445ba37aab43d8777664e85185a4 100644 (file)
@@ -68,15 +68,9 @@ xfs_bmdr_to_bmbt(
        xfs_bmbt_key_t          *tkp;
        __be64                  *tpp;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb))
-               xfs_btree_init_block_int(mp, rblock, XFS_BUF_DADDR_NULL,
-                                XFS_BMAP_CRC_MAGIC, 0, 0, ip->i_ino,
-                                XFS_BTREE_LONG_PTRS);
-       else
-               xfs_btree_init_block_int(mp, rblock, XFS_BUF_DADDR_NULL,
-                                XFS_BMAP_MAGIC, 0, 0, ip->i_ino,
+       xfs_btree_init_block_int(mp, rblock, XFS_BUF_DADDR_NULL,
+                                XFS_BTNUM_BMAP, 0, 0, ip->i_ino,
                                 XFS_BTREE_LONG_PTRS);
-
        rblock->bb_level = dblock->bb_level;
        ASSERT(be16_to_cpu(rblock->bb_level) > 0);
        rblock->bb_numrecs = dblock->bb_numrecs;
index 8319a80e3f550d42382d83367bad4a3a33c73f53..86ab8c605c3845d6b2cc323b1ac64f17fe94283d 100644 (file)
@@ -1096,13 +1096,14 @@ xfs_btree_init_block_int(
        struct xfs_mount        *mp,
        struct xfs_btree_block  *buf,
        xfs_daddr_t             blkno,
-       __u32                   magic,
+       xfs_btnum_t             btnum,
        __u16                   level,
        __u16                   numrecs,
        __u64                   owner,
        unsigned int            flags)
 {
        int                     crc = xfs_sb_version_hascrc(&mp->m_sb);
+       __u32                   magic = xfs_btree_magic(crc, btnum);
 
        buf->bb_magic = cpu_to_be32(magic);
        buf->bb_level = cpu_to_be16(level);
@@ -1137,14 +1138,14 @@ void
 xfs_btree_init_block(
        struct xfs_mount *mp,
        struct xfs_buf  *bp,
-       __u32           magic,
+       xfs_btnum_t     btnum,
        __u16           level,
        __u16           numrecs,
        __u64           owner,
        unsigned int    flags)
 {
        xfs_btree_init_block_int(mp, XFS_BUF_TO_BLOCK(bp), bp->b_bn,
-                                magic, level, numrecs, owner, flags);
+                                btnum, level, numrecs, owner, flags);
 }
 
 STATIC void
@@ -1155,8 +1156,6 @@ xfs_btree_init_block_cur(
        int                     numrecs)
 {
        __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
@@ -1170,7 +1169,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(crc, btnum), level, numrecs,
+                                cur->bc_btnum, level, numrecs,
                                 owner, cur->bc_flags);
 }
 
index bbccbf88c6f925e885ae687ddef470ed4375b0e1..37f06983ae8c0699166f7791e719603665660f09 100644 (file)
@@ -380,7 +380,7 @@ void
 xfs_btree_init_block(
        struct xfs_mount *mp,
        struct xfs_buf  *bp,
-       __u32           magic,
+       xfs_btnum_t     btnum,
        __u16           level,
        __u16           numrecs,
        __u64           owner,
@@ -391,7 +391,7 @@ xfs_btree_init_block_int(
        struct xfs_mount        *mp,
        struct xfs_btree_block  *buf,
        xfs_daddr_t             blkno,
-       __u32                   magic,
+       xfs_btnum_t             btnum,
        __u16                   level,
        __u16                   numrecs,
        __u64                   owner,
index a7dd4479ba5fad990cafa2258fc261bb91b1f4a3..6fedc05c2fa60a0ebf5e1f371b2263b621ed1414 100644 (file)
@@ -3038,12 +3038,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
                buf->b_ops = &xfs_allocbt_buf_ops;
                block = XFS_BUF_TO_BLOCK(buf);
                memset(block, 0, blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, buf, XFS_ABTB_CRC_MAGIC, 0, 1,
-                                               agno, 0);
-               else
-                       libxfs_btree_init_block(mp, buf, XFS_ABTB_MAGIC, 0, 1,
-                                               agno, 0);
+               libxfs_btree_init_block(mp, buf, XFS_BTNUM_BNO, 0, 1, agno, 0);
 
                arec = XFS_ALLOC_REC_ADDR(mp, block, 1);
                arec->ar_startblock = cpu_to_be32(libxfs_prealloc_blocks(mp));
@@ -3093,12 +3088,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
                buf->b_ops = &xfs_allocbt_buf_ops;
                block = XFS_BUF_TO_BLOCK(buf);
                memset(block, 0, blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, buf, XFS_ABTC_CRC_MAGIC, 0, 1,
-                                               agno, 0);
-               else
-                       libxfs_btree_init_block(mp, buf, XFS_ABTC_MAGIC, 0, 1,
-                                               agno, 0);
+               libxfs_btree_init_block(mp, buf, XFS_BTNUM_CNT, 0, 1, agno, 0);
 
                arec = XFS_ALLOC_REC_ADDR(mp, block, 1);
                arec->ar_startblock = cpu_to_be32(libxfs_prealloc_blocks(mp));
@@ -3141,7 +3131,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
 
                        block = XFS_BUF_TO_BLOCK(buf);
                        memset(block, 0, blocksize);
-                       libxfs_btree_init_block(mp, buf, XFS_REFC_CRC_MAGIC, 0,
+                       libxfs_btree_init_block(mp, buf, XFS_BTNUM_REFC, 0,
                                                0, agno, 0);
 
                        libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
@@ -3156,12 +3146,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
                buf->b_ops = &xfs_inobt_buf_ops;
                block = XFS_BUF_TO_BLOCK(buf);
                memset(block, 0, blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, buf, XFS_IBT_CRC_MAGIC, 0, 0,
-                                               agno, 0);
-               else
-                       libxfs_btree_init_block(mp, buf, XFS_IBT_MAGIC, 0, 0,
-                                               agno, 0);
+               libxfs_btree_init_block(mp, buf, XFS_BTNUM_INO, 0, 0, agno, 0);
                libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
 
                /*
@@ -3174,12 +3159,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
                        buf->b_ops = &xfs_inobt_buf_ops;
                        block = XFS_BUF_TO_BLOCK(buf);
                        memset(block, 0, blocksize);
-                       if (xfs_sb_version_hascrc(&mp->m_sb))
-                               libxfs_btree_init_block(mp, buf, XFS_FIBT_CRC_MAGIC, 0, 0,
-                                                       agno, 0);
-                       else
-                               libxfs_btree_init_block(mp, buf, XFS_FIBT_MAGIC, 0, 0,
-                                                       agno, 0);
+                       libxfs_btree_init_block(mp, buf, XFS_BTNUM_FINO, 0, 0, agno, 0);
                        libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
                }
 
@@ -3194,8 +3174,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
                        block = XFS_BUF_TO_BLOCK(buf);
                        memset(block, 0, blocksize);
 
-                       libxfs_btree_init_block(mp, buf, XFS_RMAP_CRC_MAGIC, 0, 0,
-                                               agno, 0);
+                       libxfs_btree_init_block(mp, buf, XFS_BTNUM_RMAP, 0, 0, agno, 0);
 
                        /*
                         * mark the AG header regions as static metadata
index 4c9e619d4802394aa96d9d8cdf50b235477e5bb4..d00b078a2f221d30906b21e5dce7591a4b314caf 100644 (file)
@@ -637,12 +637,12 @@ prop_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno,
        xfs_alloc_ptr_t         *bt_ptr;
        xfs_agblock_t           agbno;
        bt_stat_level_t         *lptr;
-       __uint32_t              crc_magic;
+       xfs_btnum_t             btnum;
 
        if (magic == XFS_ABTB_MAGIC)
-               crc_magic = XFS_ABTB_CRC_MAGIC;
+               btnum = XFS_BTNUM_BNO;
        else
-               crc_magic = XFS_ABTC_CRC_MAGIC;
+               btnum = XFS_BTNUM_CNT;
 
        level++;
 
@@ -694,12 +694,8 @@ prop_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno,
                lptr->buf_p->b_ops = &xfs_allocbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, lptr->buf_p, crc_magic, level,
-                                               0, agno, 0);
-               else
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic, level,
-                                               0, agno, 0);
+               libxfs_btree_init_block(mp, lptr->buf_p, btnum, level,
+                                       0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
 
@@ -743,7 +739,7 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
        extent_tree_node_t      *ext_ptr;
        bt_stat_level_t         *lptr;
        xfs_extlen_t            freeblks;
-       __uint32_t              crc_magic;
+       xfs_btnum_t             btnum;
 
 #ifdef XR_BLD_FREE_TRACE
        fprintf(stderr, "in build_freespace_tree, agno = %d\n", agno);
@@ -753,9 +749,9 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
 
        ASSERT(level > 0);
        if (magic == XFS_ABTB_MAGIC)
-               crc_magic = XFS_ABTB_CRC_MAGIC;
+               btnum = XFS_BTNUM_BNO;
        else
-               crc_magic = XFS_ABTC_CRC_MAGIC;
+               btnum = XFS_BTNUM_CNT;
 
        /*
         * initialize the first block on each btree level
@@ -780,12 +776,7 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
                lptr->buf_p->b_ops = &xfs_allocbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, lptr->buf_p, crc_magic, i,
-                                               0, agno, 0);
-               else
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic, i,
-                                               0, agno, 0);
+               libxfs_btree_init_block(mp, lptr->buf_p, btnum, i, 0, agno, 0);
        }
        /*
         * run along leaf, setting up records.  as we have to switch
@@ -812,12 +803,7 @@ build_freespace_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
                lptr->buf_p->b_ops = &xfs_allocbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, lptr->buf_p, crc_magic, 0,
-                                               0, agno, 0);
-               else
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic, 0,
-                                               0, agno, 0);
+               libxfs_btree_init_block(mp, lptr->buf_p, btnum, 0, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
                bt_hdr->bb_numrecs = cpu_to_be16(lptr->num_recs_pb +
@@ -1074,13 +1060,8 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs,
                lptr->buf_p->b_ops = &xfs_inobt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_CRC_MAGIC,
-                                               level, 0, agno,
-                                               0);
-               else
-                       libxfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_MAGIC,
-                                               level, 0, agno, 0);
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_INO,
+                                       level, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
 
@@ -1177,6 +1158,14 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
        int                     spmask;
        uint64_t                sparse;
        uint16_t                holemask;
+       xfs_btnum_t             btnum;
+
+       if (magic == XFS_IBT_CRC_MAGIC || magic == XFS_IBT_MAGIC)
+               btnum = XFS_BTNUM_INO;
+       else if (magic == XFS_FIBT_CRC_MAGIC || magic == XFS_FIBT_MAGIC)
+               btnum = XFS_BTNUM_FINO;
+       else 
+               ASSERT(0);
 
        for (i = 0; i < level; i++)  {
                lptr = &btree_curs->level[i];
@@ -1199,13 +1188,7 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
                lptr->buf_p->b_ops = &xfs_inobt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic,
-                                               i, 0, agno,
-                                               0);
-               else
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic,
-                                               i, 0, agno, 0);
+               libxfs_btree_init_block(mp, lptr->buf_p, btnum, i, 0, agno, 0);
        }
 
        /*
@@ -1233,12 +1216,7 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno,
                lptr->buf_p->b_ops = &xfs_inobt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               if (xfs_sb_version_hascrc(&mp->m_sb))
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic,
-                                               0, 0, agno, 0);
-               else
-                       libxfs_btree_init_block(mp, lptr->buf_p, magic,
-                                               0, 0, agno, 0);
+               libxfs_btree_init_block(mp, lptr->buf_p, btnum, 0, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
                bt_hdr->bb_numrecs = cpu_to_be16(lptr->num_recs_pb +
@@ -1491,7 +1469,7 @@ prop_rmap_cursor(
                lptr->buf_p->b_ops = &xfs_rmapbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               libxfs_btree_init_block(mp, lptr->buf_p, XFS_RMAP_CRC_MAGIC,
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_RMAP,
                                        level, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
@@ -1603,7 +1581,7 @@ build_rmap_tree(
                lptr->buf_p->b_ops = &xfs_rmapbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               libxfs_btree_init_block(mp, lptr->buf_p, XFS_RMAP_CRC_MAGIC,
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_RMAP,
                                        i, 0, agno, 0);
        }
 
@@ -1630,7 +1608,7 @@ _("Insufficient memory to construct reverse-map cursor."));
                lptr->buf_p->b_ops = &xfs_rmapbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               libxfs_btree_init_block(mp, lptr->buf_p, XFS_RMAP_CRC_MAGIC,
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_RMAP,
                                        0, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
@@ -1839,7 +1817,7 @@ prop_refc_cursor(
                lptr->buf_p->b_ops = &xfs_refcountbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               libxfs_btree_init_block(mp, lptr->buf_p, XFS_REFC_CRC_MAGIC,
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_REFC,
                                        level, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
@@ -1906,7 +1884,7 @@ build_refcount_tree(
                lptr->buf_p->b_ops = &xfs_refcountbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               libxfs_btree_init_block(mp, lptr->buf_p, XFS_REFC_CRC_MAGIC,
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_REFC,
                                        i, 0, agno, 0);
        }
 
@@ -1933,7 +1911,7 @@ _("Insufficient memory to construct refcount cursor."));
                lptr->buf_p->b_ops = &xfs_refcountbt_buf_ops;
                bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
                memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
-               libxfs_btree_init_block(mp, lptr->buf_p, XFS_REFC_CRC_MAGIC,
+               libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_REFC,
                                        0, 0, agno, 0);
 
                bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);