int                     level,  /* level in btree */
        struct xfs_buf          **bpp)  /* buffer containing the block */
 {
-       if (cur->bc_ops->type == XFS_BTREE_TYPE_INODE &&
-           level == cur->bc_nlevels - 1) {
+       if (xfs_btree_at_iroot(cur, level)) {
                *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_ops->type == XFS_BTREE_TYPE_INODE &&
-           lev == cur->bc_nlevels - 1)
+       if (xfs_btree_at_iroot(cur, lev))
                return 0;
 
        if ((cur->bc_levels[lev].ra | lr) == cur->bc_levels[lev].ra)
        int                     error = 0;
 
        /* special case the root block if in an inode */
-       if (cur->bc_ops->type == XFS_BTREE_TYPE_INODE &&
-           level == cur->bc_nlevels - 1) {
+       if (xfs_btree_at_iroot(cur, level)) {
                *blkp = xfs_btree_get_iroot(cur);
                return 0;
        }
        int                     error;          /* error return value */
        int                     i;
 
-       if ((cur->bc_ops->type == XFS_BTREE_TYPE_INODE) &&
-           level == cur->bc_nlevels - 1)
+       if (xfs_btree_at_iroot(cur, level))
                goto out0;
 
        /* Set up variables for this block as "right". */
        int                     error;          /* error return value */
        int                     i;              /* loop counter */
 
-       if (cur->bc_ops->type == XFS_BTREE_TYPE_INODE &&
-           level == cur->bc_nlevels - 1)
+       if (xfs_btree_at_iroot(cur, level))
                goto out0;
 
        /* Set up variables for this block as "left". */
 {
        int                     error = 0;
 
-       if (cur->bc_ops->type == XFS_BTREE_TYPE_INODE &&
-           level == cur->bc_nlevels - 1) {
+       if (xfs_btree_at_iroot(cur, level)) {
                struct xfs_inode *ip = cur->bc_ino.ip;
 
                if (numrecs < cur->bc_ops->get_dmaxrecs(cur, level)) {
         * Try to get rid of the next level down.  If we can't then there's
         * nothing left to do.
         */
-       if (level == cur->bc_nlevels - 1) {
-               if (cur->bc_ops->type == XFS_BTREE_TYPE_INODE) {
-                       xfs_iroot_realloc(cur->bc_ino.ip, -1,
-                                         cur->bc_ino.whichfork);
+       if (xfs_btree_at_iroot(cur, level)) {
+               xfs_iroot_realloc(cur->bc_ino.ip, -1, cur->bc_ino.whichfork);
 
-                       error = xfs_btree_kill_iroot(cur);
-                       if (error)
-                               goto error0;
+               error = xfs_btree_kill_iroot(cur);
+               if (error)
+                       goto error0;
 
-                       error = xfs_btree_dec_cursor(cur, level, stat);
-                       if (error)
-                               goto error0;
-                       *stat = 1;
-                       return 0;
-               }
+               error = xfs_btree_dec_cursor(cur, level, stat);
+               if (error)
+                       goto error0;
+               *stat = 1;
+               return 0;
+       }
 
-               /*
-                * If this is the root level, and there's only one entry left,
-                * and it's NOT the leaf level, then we can get rid of this
-                * level.
-                */
+       /*
+        * If this is the root level, and there's only one entry left, and it's
+        * NOT the leaf level, then we can get rid of this level.
+        */
+       if (level == cur->bc_nlevels - 1) {
                if (numrecs == 1 && level > 0) {
                        union xfs_btree_ptr     *pp;
                        /*