diff --git a/fs/xfs/libxfs/xfs_rtbitmap.c b/fs/xfs/libxfs/xfs_rtbitmap.c index 7712f282d172..1855182c11ec 100644 --- a/fs/xfs/libxfs/xfs_rtbitmap.c +++ b/fs/xfs/libxfs/xfs_rtbitmap.c @@ -1038,8 +1038,11 @@ xfs_rtalloc_query_range( 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; @@ -1083,7 +1086,7 @@ xfs_rtalloc_query_all( 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);