From: Darrick J. Wong <djwong@xxxxxxxxxx> If someone creates a realtime volume exactly *one* extent in length, the sizing calculation for the incore rt space usage bitmap will be zero because the integer division here rounds down. Use howmany() to round up. Note that there can't be that many single-extent rt volumes since repair will corrupt them into zero-extent rt volumes, and we haven't gotten any reports. Found by running xfs/530 after fixing xfs_repair to check the rt bitmap. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> Reviewed-by: Christoph Hellwig <hch@xxxxxx> --- repair/incore.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repair/incore.c b/repair/incore.c index 4ffe18ab..10a8c2a8 100644 --- a/repair/incore.c +++ b/repair/incore.c @@ -209,7 +209,7 @@ init_rt_bmap( if (mp->m_sb.sb_rextents == 0) return; - rt_bmap_size = roundup(mp->m_sb.sb_rextents / (NBBY / XR_BB), + rt_bmap_size = roundup(howmany(mp->m_sb.sb_rextents, (NBBY / XR_BB)), sizeof(uint64_t)); rt_bmap = memalign(sizeof(uint64_t), rt_bmap_size);