int                     level,  /* level of the btree block */
        struct xfs_buf          *bp)    /* buffer containing block, if any */
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                return xfs_btree_check_lblock(cur, block, level, bp);
        else
                return xfs_btree_check_sblock(cur, block, level, bp);
        int                             index,
        int                             level)
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (xfs_btree_check_lptr(cur, be64_to_cpu((&ptr->l)[index]),
                                level))
                        return 0;
               xfs_is_shutdown(cur->bc_mp) || error != 0);
        if (unlikely(cur->bc_flags & XFS_BTREE_STAGING))
                kfree(cur->bc_ops);
-       if (!(cur->bc_flags & XFS_BTREE_LONG_PTRS) && cur->bc_ag.pag)
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) && cur->bc_ag.pag)
                xfs_perag_put(cur->bc_ag.pag);
        kmem_cache_free(cur->bc_cache, cur);
 }
  * record, key or pointer (xfs_btree_*_addr).  Note that all addressing
  * inside the btree block is done using indices starting at one, not zero!
  *
- * If XFS_BTREE_OVERLAPPING is set, then this btree supports keys containing
+ * If XFS_BTGEO_OVERLAPPING is set, then this btree supports keys containing
  * overlapping intervals.  In such a tree, records are still sorted lowest to
  * highest and indexed by the smallest key value that refers to the record.
  * However, nodes are different: each pointer has two associated keys -- one
  */
 static inline size_t xfs_btree_block_len(struct xfs_btree_cur *cur)
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (xfs_has_crc(cur->bc_mp))
                        return XFS_BTREE_LBLOCK_CRC_LEN;
                return XFS_BTREE_LBLOCK_LEN;
  */
 static inline size_t xfs_btree_ptr_len(struct xfs_btree_cur *cur)
 {
-       return (cur->bc_flags & XFS_BTREE_LONG_PTRS) ?
+       return (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) ?
                sizeof(__be64) : sizeof(__be32);
 }
 
 xfs_btree_ifork_ptr(
        struct xfs_btree_cur    *cur)
 {
-       ASSERT(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE);
+       ASSERT(cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE);
 
        if (cur->bc_flags & XFS_BTREE_STAGING)
                return cur->bc_ino.ifake->if_fork;
        int                     level,  /* level in btree */
        struct xfs_buf          **bpp)  /* buffer containing the block */
 {
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            (level == cur->bc_nlevels - 1)) {
                *bpp = NULL;
                return xfs_btree_get_iroot(cur);
         * No readahead needed if we are at the root level and the
         * btree root is stored in the inode.
         */
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            (lev == cur->bc_nlevels - 1))
                return 0;
 
        cur->bc_levels[lev].ra |= lr;
        block = XFS_BUF_TO_BLOCK(cur->bc_levels[lev].bp);
 
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                return xfs_btree_readahead_lblock(cur, lr, block);
        return xfs_btree_readahead_sblock(cur, lr, block);
 }
        if (error)
                return error;
 
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                fsbno = be64_to_cpu(ptr->l);
                *daddr = XFS_FSB_TO_DADDR(cur->bc_mp, fsbno);
        } else {
        cur->bc_levels[lev].ra = 0;
 
        b = XFS_BUF_TO_BLOCK(bp);
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (b->bb_u.l.bb_leftsib == cpu_to_be64(NULLFSBLOCK))
                        cur->bc_levels[lev].ra |= XFS_BTCUR_LEFTRA;
                if (b->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK))
        struct xfs_btree_cur            *cur,
        const union xfs_btree_ptr       *ptr)
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                return ptr->l == cpu_to_be64(NULLFSBLOCK);
        else
                return ptr->s == cpu_to_be32(NULLAGBLOCK);
        struct xfs_btree_cur    *cur,
        union xfs_btree_ptr     *ptr)
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                ptr->l = cpu_to_be64(NULLFSBLOCK);
        else
                ptr->s = cpu_to_be32(NULLAGBLOCK);
 {
        ASSERT(lr == XFS_BB_LEFTSIB || lr == XFS_BB_RIGHTSIB);
 
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (lr == XFS_BB_RIGHTSIB)
                        ptr->l = block->bb_u.l.bb_rightsib;
                else
 {
        ASSERT(lr == XFS_BB_LEFTSIB || lr == XFS_BB_RIGHTSIB);
 
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (lr == XFS_BB_RIGHTSIB)
                        block->bb_u.l.bb_rightsib = ptr->l;
                else
        __u16                   level,
        __u16                   numrecs,
        __u64                   owner,
-       unsigned int            flags)
+       unsigned int            geom_flags)
 {
-       int                     crc = xfs_has_crc(mp);
+       bool                    crc = xfs_has_crc(mp);
        __u32                   magic = xfs_btree_magic(crc, btnum);
 
        buf->bb_magic = cpu_to_be32(magic);
        buf->bb_level = cpu_to_be16(level);
        buf->bb_numrecs = cpu_to_be16(numrecs);
 
-       if (flags & XFS_BTREE_LONG_PTRS) {
+       if (geom_flags & XFS_BTGEO_LONG_PTRS) {
                buf->bb_u.l.bb_leftsib = cpu_to_be64(NULLFSBLOCK);
                buf->bb_u.l.bb_rightsib = cpu_to_be64(NULLFSBLOCK);
                if (crc) {
         * change in future, but is safe for current users of the generic btree
         * code.
         */
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                owner = cur->bc_ino.ip->i_ino;
        else
                owner = cur->bc_ag.pag->pag_agno;
 
        xfs_btree_init_block_int(cur->bc_mp, XFS_BUF_TO_BLOCK(bp),
                                xfs_buf_daddr(bp), cur->bc_btnum, level,
-                               numrecs, owner, cur->bc_flags);
+                               numrecs, owner, cur->bc_ops->geom_flags);
 }
 
 /*
 
        if (level > 0)
                return 0;
-       if (!(cur->bc_flags & XFS_BTREE_LASTREC_UPDATE))
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_LASTREC_UPDATE))
                return 0;
 
        xfs_btree_get_sibling(cur, block, &ptr, XFS_BB_RIGHTSIB);
        struct xfs_buf          *bp,
        union xfs_btree_ptr     *ptr)
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                ptr->l = cpu_to_be64(XFS_DADDR_TO_FSB(cur->bc_mp,
                                        xfs_buf_daddr(bp)));
        else {
                        nbits = XFS_BB_NUM_BITS;
                }
                xfs_btree_offsets(fields,
-                                 (cur->bc_flags & XFS_BTREE_LONG_PTRS) ?
+                                 (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) ?
                                        loffsets : soffsets,
                                  nbits, &first, &last);
                xfs_trans_buf_set_type(cur->bc_tp, bp, XFS_BLFT_BTREE_BUF);
         * confused or have the tree root in an inode.
         */
        if (lev == cur->bc_nlevels) {
-               if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
+               if (cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE)
                        goto out0;
                ASSERT(0);
                xfs_btree_mark_sick(cur);
         * or the root of the tree is in an inode.
         */
        if (lev == cur->bc_nlevels) {
-               if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
+               if (cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE)
                        goto out0;
                ASSERT(0);
                xfs_btree_mark_sick(cur);
        int                     error = 0;
 
        /* special case the root block if in an inode */
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            (level == cur->bc_nlevels - 1)) {
                *blkp = xfs_btree_get_iroot(cur);
                return 0;
        /* Check the inode owner since the verifiers don't. */
        if (xfs_has_crc(cur->bc_mp) &&
            !(cur->bc_ino.flags & XFS_BTCUR_BMBT_INVALID_OWNER) &&
-           (cur->bc_flags & XFS_BTREE_LONG_PTRS) &&
+           (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) &&
            be64_to_cpu((*blkp)->bb_u.l.bb_owner) !=
                        cur->bc_ino.ip->i_ino)
                goto out_bad;
        struct xfs_btree_cur    *cur,
        union xfs_btree_key     *key)
 {
-       ASSERT(cur->bc_flags & XFS_BTREE_OVERLAPPING);
+       ASSERT(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING);
        return (union xfs_btree_key *)((char *)key +
                        (cur->bc_ops->key_len / 2));
 }
        rec = xfs_btree_rec_addr(cur, 1, block);
        cur->bc_ops->init_key_from_rec(key, rec);
 
-       if (cur->bc_flags & XFS_BTREE_OVERLAPPING) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING) {
 
                cur->bc_ops->init_high_key_from_rec(&max_hkey, rec);
                for (n = 2; n <= xfs_btree_get_numrecs(block); n++) {
        union xfs_btree_key     *high;
        int                     n;
 
-       if (cur->bc_flags & XFS_BTREE_OVERLAPPING) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING) {
                memcpy(key, xfs_btree_key_addr(cur, 1, block),
                                cur->bc_ops->key_len / 2);
 
        struct xfs_btree_cur    *cur,
        int                     ptr)
 {
-       return (cur->bc_flags & XFS_BTREE_OVERLAPPING) || ptr == 1;
+       return (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING) || ptr == 1;
 }
 
 /*
        struct xfs_buf          *bp;
        int                     ptr;
 
-       ASSERT(cur->bc_flags & XFS_BTREE_OVERLAPPING);
+       ASSERT(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING);
 
        /* Exit if there aren't any parent levels to update. */
        if (level + 1 >= cur->bc_nlevels)
        ASSERT(level >= 0);
 
        block = xfs_btree_get_block(cur, level, &bp);
-       if (cur->bc_flags & XFS_BTREE_OVERLAPPING)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING)
                return __xfs_btree_updkeys(cur, level, block, bp, false);
 
        /*
        int                     error;          /* error return value */
        int                     i;
 
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            level == cur->bc_nlevels - 1)
                goto out0;
 
         * Using a temporary cursor, update the parent key values of the
         * block on the left.
         */
-       if (cur->bc_flags & XFS_BTREE_OVERLAPPING) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING) {
                error = xfs_btree_dup_cursor(cur, &tcur);
                if (error)
                        goto error0;
        int                     error;          /* error return value */
        int                     i;              /* loop counter */
 
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            (level == cur->bc_nlevels - 1))
                goto out0;
 
                goto error1;
 
        /* Update the parent high keys of the left block, if needed. */
-       if (cur->bc_flags & XFS_BTREE_OVERLAPPING) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING) {
                error = xfs_btree_update_keys(cur, level);
                if (error)
                        goto error1;
        }
 
        /* Update the parent high keys of the left block, if needed. */
-       if (cur->bc_flags & XFS_BTREE_OVERLAPPING) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING) {
                error = xfs_btree_update_keys(cur, level);
                if (error)
                        goto error0;
 
        XFS_BTREE_STATS_INC(cur, newroot);
 
-       ASSERT(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE);
+       ASSERT(cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE);
 
        level = cur->bc_nlevels - 1;
 
        memcpy(cblock, block, xfs_btree_block_len(cur));
        if (xfs_has_crc(cur->bc_mp)) {
                __be64 bno = cpu_to_be64(xfs_buf_daddr(cbp));
-               if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+               if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                        cblock->bb_u.l.bb_blkno = bno;
                else
                        cblock->bb_u.s.bb_blkno = bno;
 {
        int                     error = 0;
 
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            level == cur->bc_nlevels - 1) {
                struct xfs_inode *ip = cur->bc_ino.ip;
 
         * If we have an external root pointer, and we've made it to the
         * root level, allocate a new root block and we're done.
         */
-       if (!(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            (level >= cur->bc_nlevels)) {
                error = xfs_btree_new_root(cur, stat);
                xfs_btree_set_ptr_null(cur, ptrp);
 #endif
        int                     i;
 
-       ASSERT(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE);
+       ASSERT(cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE);
        ASSERT(cur->bc_nlevels > 1);
 
        /*
         * nothing left to do.
         */
        if (level == cur->bc_nlevels - 1) {
-               if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) {
+               if (cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) {
                        xfs_iroot_realloc(cur->bc_ino.ip, -1,
                                          cur->bc_ino.whichfork);
 
        xfs_btree_get_sibling(cur, block, &rptr, XFS_BB_RIGHTSIB);
        xfs_btree_get_sibling(cur, block, &lptr, XFS_BB_LEFTSIB);
 
-       if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) {
                /*
                 * One child of root, need to get a chance to copy its contents
                 * into the root and delete it. Can't go up to next level,
         * If we joined with the right neighbor and there's a level above
         * us, increment the cursor at that level.
         */
-       else if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) ||
+       else if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) ||
                   (level + 1 < cur->bc_nlevels)) {
                error = xfs_btree_increment(cur, level + 1, &i);
                if (error)
         * If we combined blocks as part of deleting the record, delrec won't
         * have updated the parent high keys so we have to do that here.
         */
-       if (joined && (cur->bc_flags & XFS_BTREE_OVERLAPPING)) {
+       if (joined && (cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING)) {
                error = xfs_btree_updkeys_force(cur, 0);
                if (error)
                        goto error0;
         * return the same block without checking if the right sibling points
         * back to us and creates a cyclic reference in the btree.
         */
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (be64_to_cpu(rptr.l) == XFS_DADDR_TO_FSB(cur->bc_mp,
                                                        xfs_buf_daddr(bp))) {
                        xfs_btree_mark_sick(cur);
 
        /* modify the owner */
        block = xfs_btree_get_block(cur, level, &bp);
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
                if (block->bb_u.l.bb_owner == cpu_to_be64(bbcoi->new_owner))
                        return 0;
                block->bb_u.l.bb_owner = cpu_to_be64(bbcoi->new_owner);
         * though, so everything is consistent in memory.
         */
        if (!bp) {
-               ASSERT(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE);
+               ASSERT(cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE);
                ASSERT(level == cur->bc_nlevels - 1);
                return 0;
        }
        if (!xfs_btree_keycmp_le(cur, &low_key, &high_key))
                return -EINVAL;
 
-       if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING))
                return xfs_btree_simple_query_range(cur, &low_key,
                                &high_key, fn, priv);
        return xfs_btree_overlapped_query_range(cur, &low_key, &high_key,
        const union xfs_btree_ptr       *a,
        const union xfs_btree_ptr       *b)
 {
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                return (int64_t)be64_to_cpu(a->l) - be64_to_cpu(b->l);
        return (int64_t)be32_to_cpu(a->s) - be32_to_cpu(b->s);
 }
                key_contig = cur->bc_ops->keys_contiguous(cur, &info->high_key,
                                        &rec_key, info->key_mask);
                if (key_contig == XBTREE_KEY_OVERLAP &&
-                               !(cur->bc_flags & XFS_BTREE_OVERLAPPING))
+                               !(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING))
                        return -EFSCORRUPTED;
                if (key_contig == XBTREE_KEY_GAP)
                        return -ECANCELED;
                return true;
 
        /* There are more record blocks. */
-       if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                return block->bb_u.l.bb_rightsib != cpu_to_be64(NULLFSBLOCK);
        else
                return block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK);
 
                *error = 0;
                fallthrough;
        default:
-               if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
+               if (cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE)
                        trace_xchk_ifork_btree_op_error(sc, cur, level,
                                        *error, ret_ip);
                else
 {
        sc->sm->sm_flags |= errflag;
 
-       if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
+       if (cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE)
                trace_xchk_ifork_btree_error(sc, cur, level,
                                ret_ip);
        else
        if (xfs_btree_keycmp_lt(cur, &key, keyp))
                xchk_btree_set_corrupt(bs->sc, cur, 1);
 
-       if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING))
                return;
 
        /* Is high_key(rec) no larger than the parent high key? */
        if (xfs_btree_keycmp_lt(cur, key, keyp))
                xchk_btree_set_corrupt(bs->sc, cur, level);
 
-       if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING))
                return;
 
        /* Is this block's high key no larger than the parent high key? */
        bool                    res;
 
        /* A btree rooted in an inode has no block pointer to the root. */
-       if ((bs->cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((bs->cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            level == bs->cur->bc_nlevels)
                return true;
 
        /* Otherwise, check the pointers. */
-       if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (bs->cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                res = xfs_btree_check_lptr(bs->cur, be64_to_cpu(ptr->l), level);
        else
                res = xfs_btree_check_sptr(bs->cur, be32_to_cpu(ptr->s), level);
         * sc->sa so that we can check for the presence of an ownership record
         * in the rmap btree for the AG containing the block.
         */
-       init_sa = bs->cur->bc_flags & XFS_BTREE_ROOT_IN_INODE;
+       init_sa = bs->cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE;
        if (init_sa) {
                error = xchk_ag_init_existing(bs->sc, agno, &bs->sc->sa);
                if (!xchk_btree_xref_process_error(bs->sc, bs->cur,
         * up.
         */
        if (bp == NULL) {
-               if (!(cur->bc_flags & XFS_BTREE_ROOT_IN_INODE))
+               if (!(cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE))
                        xchk_btree_set_corrupt(bs->sc, bs->cur, level);
                return 0;
        }
         * child block might be less than the standard minrecs, but that's ok
         * provided that there's only one direct child of the root.
         */
-       if ((cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) &&
+       if ((cur->bc_ops->geom_flags & XFS_BTGEO_ROOT_IN_INODE) &&
            level == cur->bc_nlevels - 2) {
                struct xfs_btree_block  *root_block;
                struct xfs_buf          *root_bp;
                return;
        }
 
-       if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING))
                return;
 
        /* Make sure the high key of this block matches the parent. */
                return error;
 
        xfs_btree_get_block(bs->cur, level, pbp);
-       if (bs->cur->bc_flags & XFS_BTREE_LONG_PTRS)
+       if (bs->cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS)
                failed_at = __xfs_btree_check_lblock(bs->cur, *pblock,
                                level, *pbp);
        else
        if (xfs_btree_keycmp_ne(cur, &block_keys, parent_keys))
                xchk_btree_set_corrupt(bs->sc, cur, 1);
 
-       if (!(cur->bc_flags & XFS_BTREE_OVERLAPPING))
+       if (!(cur->bc_ops->geom_flags & XFS_BTGEO_OVERLAPPING))
                return;
 
        /* Get high keys */