From: Eric Sandeen Date: Tue, 4 Apr 2017 20:37:43 +0000 (-0500) Subject: xfs: remove boilerplate around xfs_btree_init_block X-Git-Tag: v4.11.0-rc1~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e394a4b1eada8dad23997081418b2c55d468aef7;p=thirdparty%2Fxfsprogs-dev.git xfs: remove boilerplate around xfs_btree_init_block 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 Reviewed-by: Brian Foster Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index 270fea92e..3e234ff2a 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -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); diff --git a/libxfs/xfs_bmap_btree.c b/libxfs/xfs_bmap_btree.c index b01d61dd4..00576e29b 100644 --- a/libxfs/xfs_bmap_btree.c +++ b/libxfs/xfs_bmap_btree.c @@ -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; diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index 8319a80e3..86ab8c605 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -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); } diff --git a/libxfs/xfs_btree.h b/libxfs/xfs_btree.h index bbccbf88c..37f06983a 100644 --- a/libxfs/xfs_btree.h +++ b/libxfs/xfs_btree.h @@ -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, diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index a7dd4479b..6fedc05c2 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -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 diff --git a/repair/phase5.c b/repair/phase5.c index 4c9e619d4..d00b078a2 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -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);