}
        for (bucket = 0; bucket < XFS_AGI_UNLINKED_BUCKETS; bucket++)
                agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
-       if (xfs_sb_version_hasinobtcounts(&mp->m_sb)) {
+       if (xfs_has_inobtcounts(mp)) {
                agi->agi_iblocks = cpu_to_be32(1);
-               if (xfs_sb_version_hasfinobt(&mp->m_sb))
+               if (xfs_has_finobt(mp))
                        agi->agi_fblocks = cpu_to_be32(1);
        }
 }
 
        min_free += min_t(unsigned int, levels[XFS_BTNUM_CNTi] + 1,
                                       mp->m_ag_maxlevels);
        /* space needed reverse mapping used space btree */
-       if (xfs_sb_version_hasrmapbt(&mp->m_sb))
+       if (xfs_has_rmapbt(mp))
                min_free += min_t(unsigned int, levels[XFS_BTNUM_RMAPi] + 1,
                                                mp->m_rmap_maxlevels);
 
             be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) > mp->m_rmap_maxlevels))
                return __this_address;
 
-       if (xfs_sb_version_hasrmapbt(&mp->m_sb) &&
+       if (xfs_has_rmapbt(mp) &&
            be32_to_cpu(agf->agf_rmap_blocks) > be32_to_cpu(agf->agf_length))
                return __this_address;
 
        if (bp->b_pag && be32_to_cpu(agf->agf_seqno) != bp->b_pag->pag_agno)
                return __this_address;
 
-       if (xfs_sb_version_haslazysbcount(&mp->m_sb) &&
+       if (xfs_has_lazysbcount(mp) &&
            be32_to_cpu(agf->agf_btreeblks) > be32_to_cpu(agf->agf_length))
                return __this_address;
 
-       if (xfs_sb_version_hasreflink(&mp->m_sb) &&
+       if (xfs_has_reflink(mp) &&
            be32_to_cpu(agf->agf_refcount_blocks) >
            be32_to_cpu(agf->agf_length))
                return __this_address;
 
-       if (xfs_sb_version_hasreflink(&mp->m_sb) &&
+       if (xfs_has_reflink(mp) &&
            (be32_to_cpu(agf->agf_refcount_level) < 1 ||
             be32_to_cpu(agf->agf_refcount_level) > mp->m_refc_maxlevels))
                return __this_address;
                 * counter only tracks non-root blocks.
                 */
                allocbt_blks = pag->pagf_btreeblks;
-               if (xfs_sb_version_hasrmapbt(&mp->m_sb))
+               if (xfs_has_rmapbt(mp))
                        allocbt_blks -= be32_to_cpu(agf->agf_rmap_blocks) - 1;
                if (allocbt_blks > 0)
                        atomic64_add(allocbt_blks, &mp->m_allocbt_blks);
 
 xfs_buf_to_agfl_bno(
        struct xfs_buf          *bp)
 {
-       if (xfs_sb_version_hascrc(&bp->b_mount->m_sb))
+       if (xfs_has_crc(bp->b_mount))
                return bp->b_addr + sizeof(struct xfs_agfl);
        return bp->b_addr;
 }
 
        if (!xfs_verify_magic(bp, block->bb_magic))
                return __this_address;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                fa = xfs_btree_sblock_v5hdr_verify(bp);
                if (fa)
                        return fa;
 
        if (!xfs_verify_magic(bp, block->bb_magic))
                return __this_address;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                /*
                 * XXX: need a better way of verifying the owner here. Right now
                 * just make sure there has been one set.
 
        struct xfs_btree_block  *block = XFS_BUF_TO_BLOCK(bp);
        struct xfs_buf_log_item *bip = bp->b_log_item;
 
-       if (!xfs_sb_version_hascrc(&bp->b_mount->m_sb))
+       if (!xfs_has_crc(bp->b_mount))
                return;
        if (bip)
                block->bb_u.l.bb_lsn = cpu_to_be64(bip->bli_item.li_lsn);
        struct xfs_btree_block  *block = XFS_BUF_TO_BLOCK(bp);
        struct xfs_buf_log_item *bip = bp->b_log_item;
 
-       if (!xfs_sb_version_hascrc(&bp->b_mount->m_sb))
+       if (!xfs_has_crc(bp->b_mount))
                return;
        if (bip)
                block->bb_u.s.bb_lsn = cpu_to_be64(bip->bli_item.li_lsn);
                return error;
 
        /* Check the inode owner since the verifiers don't. */
-       if (xfs_sb_version_hascrc(&cur->bc_mp->m_sb) &&
+       if (xfs_has_crc(cur->bc_mp) &&
            !(cur->bc_ino.flags & XFS_BTCUR_BMBT_INVALID_OWNER) &&
            (cur->bc_flags & XFS_BTREE_LONG_PTRS) &&
            be64_to_cpu((*blkp)->bb_u.l.bb_owner) !=
 
        struct xfs_da3_icnode_hdr       *to,
        struct xfs_da_intnode           *from)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_da3_intnode  *from3 = (struct xfs_da3_intnode *)from;
 
                to->forw = be32_to_cpu(from3->hdr.info.hdr.forw);
        struct xfs_da_intnode           *to,
        struct xfs_da3_icnode_hdr       *from)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_da3_intnode  *to3 = (struct xfs_da3_intnode *)to;
 
                ASSERT(from->magic == XFS_DA3_NODE_MAGIC);
        if (!xfs_verify_magic16(bp, hdr->magic))
                return __this_address;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid))
                        return __this_address;
                if (be64_to_cpu(hdr3->blkno) != bp->b_bn)
 
        dageo->fsblog = mp->m_sb.sb_blocklog;
        dageo->blksize = xfs_dir2_dirblock_bytes(&mp->m_sb);
        dageo->fsbcount = 1 << mp->m_sb.sb_dirblklog;
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                dageo->node_hdr_size = sizeof(struct xfs_da3_node_hdr);
                dageo->leaf_hdr_size = sizeof(struct xfs_dir3_leaf_hdr);
                dageo->free_hdr_size = sizeof(struct xfs_dir3_free_hdr);
        struct xfs_mount        *mp,
        struct xfs_name         *name)
 {
-       if (unlikely(xfs_sb_version_hasasciici(&mp->m_sb)))
+       if (unlikely(xfs_has_asciici(mp)))
                return xfs_ascii_ci_hashname(name);
        return xfs_da_hashname(name->name, name->len);
 }
        const unsigned char     *name,
        int                     len)
 {
-       if (unlikely(xfs_sb_version_hasasciici(&args->dp->i_mount->m_sb)))
+       if (unlikely(xfs_has_asciici(args->dp->i_mount)))
                return xfs_ascii_ci_compname(args, name, len);
        return xfs_da_compname(args, name, len);
 }
 
        if (!xfs_verify_magic(bp, hdr3->magic))
                return __this_address;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid))
                        return __this_address;
                if (be64_to_cpu(hdr3->blkno) != bp->b_bn)
 {
        struct xfs_mount        *mp = dp->i_mount;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
 
                if (be64_to_cpu(hdr3->owner) != dp->i_ino)
 
        struct xfs_mount                *mp,
        struct xfs_dir2_data_hdr        *hdr)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb))
+       if (xfs_has_crc(mp))
                return ((struct xfs_dir3_data_hdr *)hdr)->best_free;
        return hdr->bestfree;
 }
        struct xfs_mount                *mp,
        struct xfs_dir2_data_entry      *dep)
 {
-       if (xfs_sb_version_hasftype(&mp->m_sb)) {
+       if (xfs_has_ftype(mp)) {
                uint8_t                 ftype = dep->name[dep->namelen];
 
                if (likely(ftype < XFS_DIR3_FT_MAX))
        ASSERT(ftype < XFS_DIR3_FT_MAX);
        ASSERT(dep->namelen != 0);
 
-       if (xfs_sb_version_hasftype(&mp->m_sb))
+       if (xfs_has_ftype(mp))
                dep->name[dep->namelen] = ftype;
 }
 
        if (!xfs_verify_magic(bp, hdr3->magic))
                return __this_address;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                if (!uuid_equal(&hdr3->uuid, &mp->m_sb.sb_meta_uuid))
                        return __this_address;
                if (be64_to_cpu(hdr3->blkno) != bp->b_bn)
 {
        struct xfs_mount        *mp = dp->i_mount;
 
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_dir3_data_hdr *hdr3 = bp->b_addr;
 
                if (be64_to_cpu(hdr3->hdr.owner) != dp->i_ino)
 
        struct xfs_dir3_icleaf_hdr      *to,
        struct xfs_dir2_leaf            *from)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_dir3_leaf *from3 = (struct xfs_dir3_leaf *)from;
 
                to->forw = be32_to_cpu(from3->hdr.info.hdr.forw);
        struct xfs_dir2_leaf            *to,
        struct xfs_dir3_icleaf_hdr      *from)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_dir3_leaf *to3 = (struct xfs_dir3_leaf *)to;
 
                ASSERT(from->magic == XFS_DIR3_LEAF1_MAGIC ||
 
        struct xfs_dir3_icfree_hdr      *to,
        struct xfs_dir2_free            *from)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_dir3_free    *from3 = (struct xfs_dir3_free *)from;
 
                to->magic = be32_to_cpu(from3->hdr.hdr.magic);
        struct xfs_dir2_free            *to,
        struct xfs_dir3_icfree_hdr      *from)
 {
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                struct xfs_dir3_free    *to3 = (struct xfs_dir3_free *)to;
 
                ASSERT(from->magic == XFS_DIR3_FREE_MAGIC);
 
 
        len = offsetof(struct xfs_dir2_data_entry, name[0]) + namelen +
                        sizeof(xfs_dir2_data_off_t) /* tag */;
-       if (xfs_sb_version_hasftype(&mp->m_sb))
+       if (xfs_has_ftype(mp))
                len += sizeof(uint8_t);
        return round_up(len, XFS_DIR2_DATA_ALIGN);
 }
 
        count += sizeof(struct xfs_dir2_sf_entry);      /* namelen + offset */
        count += hdr->i8count ? XFS_INO64_SIZE : XFS_INO32_SIZE; /* ino # */
 
-       if (xfs_sb_version_hasftype(&mp->m_sb))
+       if (xfs_has_ftype(mp))
                count += sizeof(uint8_t);
        return count;
 }
 {
        uint8_t                         *from = sfep->name + sfep->namelen;
 
-       if (xfs_sb_version_hasftype(&mp->m_sb))
+       if (xfs_has_ftype(mp))
                from++;
 
        if (!hdr->i8count)
 
        ASSERT(ino <= XFS_MAXINUMBER);
 
-       if (xfs_sb_version_hasftype(&mp->m_sb))
+       if (xfs_has_ftype(mp))
                to++;
 
        if (hdr->i8count)
        struct xfs_mount                *mp,
        struct xfs_dir2_sf_entry        *sfep)
 {
-       if (xfs_sb_version_hasftype(&mp->m_sb)) {
+       if (xfs_has_ftype(mp)) {
                uint8_t                 ftype = sfep->name[sfep->namelen];
 
                if (ftype < XFS_DIR3_FT_MAX)
 {
        ASSERT(ftype < XFS_DIR3_FT_MAX);
 
-       if (xfs_sb_version_hasftype(&mp->m_sb))
+       if (xfs_has_ftype(mp))
                sfep->name[sfep->namelen] = ftype;
 }
 
 
                return __this_address;
 
        if ((ddq->d_type & XFS_DQTYPE_BIGTIME) &&
-           !xfs_sb_version_hasbigtime(&mp->m_sb))
+           !xfs_has_bigtime(mp))
                return __this_address;
 
        if ((ddq->d_type & XFS_DQTYPE_BIGTIME) && !ddq->d_id)
 
         * That means for v3 inode we log the entire buffer rather than just the
         * inode cores.
         */
-       if (xfs_sb_version_has_v3inode(&mp->m_sb)) {
+       if (xfs_has_v3inodes(mp)) {
                version = 3;
                ino = XFS_AGINO_TO_INO(mp, agno, XFS_AGB_TO_AGINO(mp, agbno));
 
 
 #ifdef DEBUG
        /* randomly do sparse inode allocations */
-       if (xfs_sb_version_hassparseinodes(&tp->t_mountp->m_sb) &&
+       if (xfs_has_sparseinodes(tp->t_mountp) &&
            igeo->ialloc_min_blks < igeo->ialloc_blks)
                do_sparse = prandom_u32() & 1;
 #endif
         * Finally, try a sparse allocation if the filesystem supports it and
         * the sparse allocation length is smaller than a full chunk.
         */
-       if (xfs_sb_version_hassparseinodes(&args.mp->m_sb) &&
+       if (xfs_has_sparseinodes(args.mp) &&
            igeo->ialloc_min_blks < igeo->ialloc_blks &&
            args.fsbno == NULLFSBLOCK) {
 sparse_alloc:
                 * from the previous call. Set merge false to replace any
                 * existing record with this one.
                 */
-               if (xfs_sb_version_hasfinobt(&args.mp->m_sb)) {
+               if (xfs_has_finobt(args.mp)) {
                        error = xfs_inobt_insert_sprec(args.mp, tp, agbp, pag,
                                       XFS_BTNUM_FINO, &rec, false);
                        if (error)
                if (error)
                        return error;
 
-               if (xfs_sb_version_hasfinobt(&args.mp->m_sb)) {
+               if (xfs_has_finobt(args.mp)) {
                        error = xfs_inobt_insert(args.mp, tp, agbp, pag, newino,
                                                 newlen, XFS_BTNUM_FINO);
                        if (error)
        int                             offset;
        int                             i;
 
-       if (!xfs_sb_version_hasfinobt(&mp->m_sb))
+       if (!xfs_has_finobt(mp))
                return xfs_dialloc_ag_inobt(tp, agbp, pag, parent, inop);
 
        /*
        /*
         * Fix up the free inode btree.
         */
-       if (xfs_sb_version_hasfinobt(&mp->m_sb)) {
+       if (xfs_has_finobt(mp)) {
                error = xfs_difree_finobt(mp, tp, agbp, pag, agino, &rec);
                if (error)
                        goto error0;
        uint                    inodes;
 
        igeo->new_diflags2 = 0;
-       if (xfs_sb_version_hasbigtime(&mp->m_sb))
+       if (xfs_has_bigtime(mp))
                igeo->new_diflags2 |= XFS_DIFLAG2_BIGTIME;
 
        /* Compute inode btree geometry. */
         * cannot change the behavior.
         */
        igeo->inode_cluster_size_raw = XFS_INODE_BIG_CLUSTER_SIZE;
-       if (xfs_sb_version_has_v3inode(&mp->m_sb)) {
+       if (xfs_has_v3inodes(mp)) {
                int     new_size = igeo->inode_cluster_size_raw;
 
                new_size *= mp->m_sb.sb_inodesize / XFS_DINODE_MIN_SIZE;
        igeo->inodes_per_cluster = XFS_FSB_TO_INO(mp, igeo->blocks_per_cluster);
 
        /* Calculate inode cluster alignment. */
-       if (xfs_sb_version_hasalign(&mp->m_sb) &&
+       if (xfs_has_align(mp) &&
            mp->m_sb.sb_inoalignmt >= igeo->blocks_per_cluster)
                igeo->cluster_align = mp->m_sb.sb_inoalignmt;
        else
        first_bno += xfs_alloc_min_freelist(mp, NULL);
 
        /* ...the free inode btree root... */
-       if (xfs_sb_version_hasfinobt(&mp->m_sb))
+       if (xfs_has_finobt(mp))
                first_bno++;
 
        /* ...the reverse mapping btree root... */
-       if (xfs_sb_version_hasrmapbt(&mp->m_sb))
+       if (xfs_has_rmapbt(mp))
                first_bno++;
 
        /* ...the reference count btree... */
-       if (xfs_sb_version_hasreflink(&mp->m_sb))
+       if (xfs_has_reflink(mp))
                first_bno++;
 
        /*
         * Now round first_bno up to whatever allocation alignment is given
         * by the filesystem or was passed in.
         */
-       if (xfs_sb_version_hasdalign(&mp->m_sb) && igeo->ialloc_align > 0)
+       if (xfs_has_dalign(mp) && igeo->ialloc_align > 0)
                first_bno = roundup(first_bno, sunit);
-       else if (xfs_sb_version_hasalign(&mp->m_sb) &&
+       else if (xfs_has_align(mp) &&
                        mp->m_sb.sb_inoalignmt > 1)
                first_bno = roundup(first_bno, mp->m_sb.sb_inoalignmt);
 
 
        struct xfs_buf          *agbp = cur->bc_ag.agbp;
        struct xfs_agi          *agi = agbp->b_addr;
 
-       if (!xfs_sb_version_hasinobtcounts(&cur->bc_mp->m_sb))
+       if (!xfs_has_inobtcounts(cur->bc_mp))
                return;
 
        if (cur->bc_btnum == XFS_BTNUM_FINO)
         * but beware of the landmine (i.e. need to check pag->pagi_init) if we
         * ever do.
         */
-       if (xfs_sb_version_hascrc(&mp->m_sb)) {
+       if (xfs_has_crc(mp)) {
                fa = xfs_btree_sblock_v5hdr_verify(bp);
                if (fa)
                        return fa;
                fields = XFS_AGI_ROOT | XFS_AGI_LEVEL;
                agi->agi_root = cpu_to_be32(afake->af_root);
                agi->agi_level = cpu_to_be32(afake->af_levels);
-               if (xfs_sb_version_hasinobtcounts(&cur->bc_mp->m_sb)) {
+               if (xfs_has_inobtcounts(cur->bc_mp)) {
                        agi->agi_iblocks = cpu_to_be32(afake->af_blocks);
                        fields |= XFS_AGI_IBLOCKS;
                }
                fields = XFS_AGI_FREE_ROOT | XFS_AGI_FREE_LEVEL;
                agi->agi_free_root = cpu_to_be32(afake->af_root);
                agi->agi_free_level = cpu_to_be32(afake->af_levels);
-               if (xfs_sb_version_hasinobtcounts(&cur->bc_mp->m_sb)) {
+               if (xfs_has_inobtcounts(cur->bc_mp)) {
                        agi->agi_fblocks = cpu_to_be32(afake->af_blocks);
                        fields |= XFS_AGI_IBLOCKS;
                }
        if (!xfs_has_finobt(mp))
                return 0;
 
-       if (xfs_sb_version_hasinobtcounts(&mp->m_sb))
+       if (xfs_has_inobtcounts(mp))
                error = xfs_finobt_read_blocks(mp, tp, pag, &tree_len);
        else
                error = xfs_inobt_count_blocks(mp, tp, pag, XFS_BTNUM_FINO,
 
         * inode. If the inode is unused, mode is zero and we shouldn't mess
         * with the uninitialized part of it.
         */
-       if (!xfs_sb_version_has_v3inode(&ip->i_mount->m_sb))
+       if (!xfs_has_v3inodes(ip->i_mount))
                ip->i_flushiter = be16_to_cpu(from->di_flushiter);
        inode->i_generation = be32_to_cpu(from->di_gen);
        inode->i_mode = be16_to_cpu(from->di_mode);
        if (from->di_dmevmask || from->di_dmstate)
                xfs_iflags_set(ip, XFS_IPRESERVE_DM_FIELDS);
 
-       if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb)) {
+       if (xfs_has_v3inodes(ip->i_mount)) {
                inode_set_iversion_queried(inode,
                                           be64_to_cpu(from->di_changecount));
                ip->i_crtime = xfs_inode_from_disk_ts(from, from->di_crtime);
        to->di_aformat = xfs_ifork_format(ip->i_afp);
        to->di_flags = cpu_to_be16(ip->i_diflags);
 
-       if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb)) {
+       if (xfs_has_v3inodes(ip->i_mount)) {
                to->di_version = 3;
                to->di_changecount = cpu_to_be64(inode_peek_iversion(inode));
                to->di_crtime = xfs_inode_to_disk_ts(ip, ip->i_crtime);
 
        /* Verify v3 integrity information first */
        if (dip->di_version >= 3) {
-               if (!xfs_sb_version_has_v3inode(&mp->m_sb))
+               if (!xfs_has_v3inodes(mp))
                        return __this_address;
                if (!xfs_verify_cksum((char *)dip, mp->m_sb.sb_inodesize,
                                      XFS_DINODE_CRC_OFF))
 
        /* bigtime iflag can only happen on bigtime filesystems */
        if (xfs_dinode_has_bigtime(dip) &&
-           !xfs_sb_version_hasbigtime(&mp->m_sb))
+           !xfs_has_bigtime(mp))
                return __this_address;
 
        return NULL;
 
 };
 
 #define xfs_log_dinode_size(mp)                                                \
-       (xfs_sb_version_has_v3inode(&(mp)->m_sb) ?                      \
+       (xfs_has_v3inodes((mp)) ?                                       \
                sizeof(struct xfs_log_dinode) :                         \
                offsetof(struct xfs_log_dinode, di_next_unlinked))
 
 
        struct xfs_trans                *tp,
        struct xfs_bmbt_irec            *PREV)
 {
-       if (!xfs_sb_version_hasreflink(&tp->t_mountp->m_sb))
+       if (!xfs_has_reflink(tp->t_mountp))
                return;
 
        __xfs_refcount_add(tp, XFS_REFCOUNT_INCREASE, PREV->br_startblock,
        struct xfs_trans                *tp,
        struct xfs_bmbt_irec            *PREV)
 {
-       if (!xfs_sb_version_hasreflink(&tp->t_mountp->m_sb))
+       if (!xfs_has_reflink(tp->t_mountp))
                return;
 
        __xfs_refcount_add(tp, XFS_REFCOUNT_DECREASE, PREV->br_startblock,
 {
        struct xfs_mount                *mp = tp->t_mountp;
 
-       if (!xfs_sb_version_hasreflink(&mp->m_sb))
+       if (!xfs_has_reflink(mp))
                return;
 
        __xfs_refcount_add(tp, XFS_REFCOUNT_ALLOC_COW, fsb, len);
 {
        struct xfs_mount                *mp = tp->t_mountp;
 
-       if (!xfs_sb_version_hasreflink(&mp->m_sb))
+       if (!xfs_has_reflink(mp))
                return;
 
        /* Remove rmap entry */
 
         * unclean shutdown, this will be corrected by log recovery rebuilding
         * the counters from the AGF block counts.
         */
-       if (xfs_sb_version_haslazysbcount(&mp->m_sb)) {
+       if (xfs_has_lazysbcount(mp)) {
                mp->m_sb.sb_icount = percpu_counter_sum(&mp->m_icount);
                mp->m_sb.sb_ifree = percpu_counter_sum(&mp->m_ifree);
                mp->m_sb.sb_fdblocks = percpu_counter_sum(&mp->m_fdblocks);
 
         * to upgrade this inode to bigtime format, do so now.
         */
        if ((flags & (XFS_ILOG_CORE | XFS_ILOG_TIMESTAMP)) &&
-           xfs_sb_version_hasbigtime(&ip->i_mount->m_sb) &&
+           xfs_has_bigtime(ip->i_mount) &&
            !xfs_inode_has_bigtime(ip)) {
                ip->i_diflags2 |= XFS_DIFLAG2_BIGTIME;
                flags |= XFS_ILOG_CORE;
 
                               XFS_FSB_TO_B(mp, 1));
        if (alloc) {
                /* icreate tx uses ordered buffers */
-               if (xfs_sb_version_has_v3inode(&mp->m_sb))
+               if (xfs_has_v3inodes(mp))
                        return res;
                size = XFS_FSB_TO_B(mp, 1);
        }
             xfs_calc_buf_res(3, mp->m_sb.sb_sectsize) +
             xfs_calc_buf_res(xfs_allocfree_log_count(mp, 2), blksz);
 
-       if (xfs_sb_version_hasrealtime(&mp->m_sb)) {
+       if (xfs_has_realtime(mp)) {
                t2 = xfs_calc_inode_res(mp, 1) +
                     xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK),
                                     blksz) +
        t2 = xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) +
             xfs_calc_buf_res(xfs_allocfree_log_count(mp, 4), blksz);
 
-       if (xfs_sb_version_hasrealtime(&mp->m_sb)) {
+       if (xfs_has_realtime(mp)) {
                t3 = xfs_calc_buf_res(5, mp->m_sb.sb_sectsize) +
                     xfs_calc_buf_res(xfs_rtalloc_log_count(mp, 2), blksz) +
                     xfs_calc_buf_res(xfs_allocfree_log_count(mp, 2), blksz);
 
        XFS_DAREMOVE_SPACE_RES(mp, XFS_DATA_FORK)
 #define        XFS_IALLOC_SPACE_RES(mp)        \
        (M_IGEO(mp)->ialloc_blks + \
-        ((xfs_sb_version_hasfinobt(&mp->m_sb) ? 2 : 1) * \
-         M_IGEO(mp)->inobt_maxlevels))
+        ((xfs_has_finobt(mp) ? 2 : 1) * M_IGEO(mp)->inobt_maxlevels))
 
 /*
  * Space reservation values for various transactions.
 #define        XFS_SYMLINK_SPACE_RES(mp,nl,b)  \
        (XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp,nl) + (b))
 #define XFS_IFREE_SPACE_RES(mp)                \
-       (xfs_sb_version_hasfinobt(&mp->m_sb) ? \
-                       M_IGEO(mp)->inobt_maxlevels : 0)
+       (xfs_has_finobt(mp) ? M_IGEO(mp)->inobt_maxlevels : 0)
 
 
 #endif /* __XFS_TRANS_SPACE_H__ */
 
        int                     error;
 
        /* agf_btreeblks didn't exist before lazysbcount */
-       if (!xfs_sb_version_haslazysbcount(&sc->mp->m_sb))
+       if (!xfs_has_lazysbcount(sc->mp))
                return;
 
        /* Check agf_rmap_blocks; set up for agf_btreeblks check */
                xchk_block_set_corrupt(sc, sc->sa.agf_bp);
        if (pag->pagf_flcount != be32_to_cpu(agf->agf_flcount))
                xchk_block_set_corrupt(sc, sc->sa.agf_bp);
-       if (xfs_sb_version_haslazysbcount(&sc->mp->m_sb) &&
+       if (xfs_has_lazysbcount(sc->mp) &&
            pag->pagf_btreeblks != be32_to_cpu(agf->agf_btreeblks))
                xchk_block_set_corrupt(sc, sc->sa.agf_bp);
 
        xfs_agblock_t           blocks;
        int                     error = 0;
 
-       if (!xfs_sb_version_hasinobtcounts(&sc->mp->m_sb))
+       if (!xfs_has_inobtcounts(sc->mp))
                return;
 
        if (sc->sa.ino_cur) {
 
        error = xfs_ialloc_count_inodes(cur, &count, &freecount);
        if (error)
                goto err;
-       if (xfs_sb_version_hasinobtcounts(&mp->m_sb)) {
+       if (xfs_has_inobtcounts(mp)) {
                xfs_agblock_t   blocks;
 
                error = xfs_btree_count_blocks(cur, &blocks);
        agi->agi_count = cpu_to_be32(count);
        agi->agi_freecount = cpu_to_be32(freecount);
 
-       if (xfs_sb_version_hasfinobt(&mp->m_sb) &&
-           xfs_sb_version_hasinobtcounts(&mp->m_sb)) {
+       if (xfs_has_finobt(mp) && xfs_has_inobtcounts(mp)) {
                xfs_agblock_t   blocks;
 
                cur = xfs_inobt_init_cursor(mp, sc->tp, agi_bp,
 
                }
                break;
        case XFS_ATTR_FORK:
-               if (!xfs_sb_version_hasattr(&mp->m_sb) &&
-                   !xfs_sb_version_hasattr2(&mp->m_sb))
+               if (!xfs_has_attr(mp) && !xfs_has_attr2(mp))
                        xchk_ino_set_corrupt(sc, sc->ip->i_ino);
                break;
        default:
 
        }
 
        /* Set up a finobt cursor for cross-referencing. */
-       if (sa->agi_bp && xfs_sb_version_hasfinobt(&mp->m_sb) &&
+       if (sa->agi_bp && xfs_has_finobt(mp) &&
            xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_FINO)) {
                sa->fino_cur = xfs_inobt_init_cursor(mp, sc->tp, sa->agi_bp,
                                sa->pag, XFS_BTNUM_FINO);
        }
 
        /* Set up a rmapbt cursor for cross-referencing. */
-       if (sa->agf_bp && xfs_sb_version_hasrmapbt(&mp->m_sb) &&
+       if (sa->agf_bp && xfs_has_rmapbt(mp) &&
            xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_RMAP)) {
                sa->rmap_cur = xfs_rmapbt_init_cursor(mp, sc->tp, sa->agf_bp,
                                sa->pag);
        }
 
        /* Set up a refcountbt cursor for cross-referencing. */
-       if (sa->agf_bp && xfs_sb_version_hasreflink(&mp->m_sb) &&
+       if (sa->agf_bp && xfs_has_reflink(mp) &&
            xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_REFC)) {
                sa->refc_cur = xfs_refcountbt_init_cursor(mp, sc->tp,
                                sa->agf_bp, sa->pag);
 
                /* Add up the free/freelist/bnobt/cntbt blocks */
                fsc->fdblocks += pag->pagf_freeblks;
                fsc->fdblocks += pag->pagf_flcount;
-               if (xfs_sb_version_haslazysbcount(&sc->mp->m_sb)) {
+               if (xfs_has_lazysbcount(sc->mp)) {
                        fsc->fdblocks += pag->pagf_btreeblks;
                } else {
                        error = xchk_fscount_btreeblks(sc, fsc, agno);
 
                goto bad;
 
        /* no bigtime iflag without the bigtime feature */
-       if (xfs_dinode_has_bigtime(dip) &&
-           !xfs_sb_version_hasbigtime(&mp->m_sb))
+       if (xfs_dinode_has_bigtime(dip) && !xfs_has_bigtime(mp))
                goto bad;
 
        return;
 
         * a reflink filesystem we're allowed to exceed physical space
         * if there are no quota limits.
         */
-       if (xfs_sb_version_hasreflink(&mp->m_sb)) {
+       if (xfs_has_reflink(mp)) {
                if (mp->m_sb.sb_dblocks < dq->q_blk.count)
                        xchk_fblock_set_warning(sc, XFS_DATA_FORK,
                                        offset);
 
 {
        bool                    ret = false;
 
-       if (!xfs_sb_version_hascrc(&mp->m_sb) ||
+       if (!xfs_has_crc(mp) ||
            !xfs_sb_has_incompat_log_feature(&mp->m_sb,
                                XFS_SB_FEAT_INCOMPAT_LOG_ALL) ||
            xfs_is_shutdown(mp))
 
 
 static inline bool xfs_is_always_cow_inode(struct xfs_inode *ip)
 {
-       return ip->i_mount->m_always_cow &&
-               xfs_sb_version_hasreflink(&ip->i_mount->m_sb);
+       return ip->i_mount->m_always_cow && xfs_has_reflink(ip->i_mount);
 }
 
 static inline bool xfs_is_cow_inode(struct xfs_inode *ip)
 
        }
 
        /* Filesystem claims it needs repair, so refuse the mount. */
-       if (xfs_sb_version_needsrepair(&mp->m_sb)) {
+       if (xfs_has_needsrepair(mp)) {
                xfs_warn(mp, "Filesystem needs repair.  Please run xfs_repair.");
                error = -EFSCORRUPTED;
                goto out_free_sb;