if (low_rec->ar_startblock > high_rec->ar_startblock)
                return -EINVAL;
-       else if (low_rec->ar_startblock == high_rec->ar_startblock)
+       if (low_rec->ar_startblock >= mp->m_sb.sb_rextents ||
+           low_rec->ar_startblock == high_rec->ar_startblock)
                return 0;
+       if (high_rec->ar_startblock >= mp->m_sb.sb_rextents)
+               high_rec->ar_startblock = mp->m_sb.sb_rextents - 1;
 
        /* Iterate the bitmap, looking for discrepancies. */
        rtstart = low_rec->ar_startblock;
        struct xfs_rtalloc_rec          keys[2];
 
        keys[0].ar_startblock = 0;
-       keys[1].ar_startblock = tp->t_mountp->m_sb.sb_rblocks;
+       keys[1].ar_startblock = tp->t_mountp->m_sb.sb_rextents - 1;
        keys[0].ar_blockcount = keys[1].ar_blockcount = 0;
 
        return xfs_rtalloc_query_range(tp, &keys[0], &keys[1], fn, priv);