]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: fix sizing of the incore rt space usage map calculation
authorDarrick J. Wong <djwong@kernel.org>
Wed, 18 May 2022 02:48:12 +0000 (22:48 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 18 May 2022 02:48:12 +0000 (22:48 -0400)
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@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/incore.c

index 4ffe18aba839b8c022057e4607a44523d9e5371b..10a8c2a8c9fe2c8c257f75277e95de3cea710719 100644 (file)
@@ -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);