mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 01:09:38 -05:00
xfs: fix an integer overflow error in xfs_growfs_rt
During a realtime grow operation, we run a single transaction for each rt bitmap block added to the filesystem. This means that each step has to be careful to increase sb_rblocks appropriately. Fix the integer overflow error in this calculation that can happen when the extent size is very large. Found by running growfs to add a rt volume to a filesystem formatted with a 1g rt extent size. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
0e2af9296f
commit
0925fecc55
1 changed files with 5 additions and 5 deletions
|
@ -1021,7 +1021,8 @@ xfs_growfs_rt(
|
|||
((sbp->sb_rextents & ((1 << mp->m_blkbit_log) - 1)) != 0);
|
||||
bmbno < nrbmblocks;
|
||||
bmbno++) {
|
||||
xfs_trans_t *tp;
|
||||
struct xfs_trans *tp;
|
||||
xfs_rfsblock_t nrblocks_step;
|
||||
|
||||
*nmp = *mp;
|
||||
nsbp = &nmp->m_sb;
|
||||
|
@ -1030,10 +1031,9 @@ xfs_growfs_rt(
|
|||
*/
|
||||
nsbp->sb_rextsize = in->extsize;
|
||||
nsbp->sb_rbmblocks = bmbno + 1;
|
||||
nsbp->sb_rblocks =
|
||||
XFS_RTMIN(nrblocks,
|
||||
nsbp->sb_rbmblocks * NBBY *
|
||||
nsbp->sb_blocksize * nsbp->sb_rextsize);
|
||||
nrblocks_step = (bmbno + 1) * NBBY * nsbp->sb_blocksize *
|
||||
nsbp->sb_rextsize;
|
||||
nsbp->sb_rblocks = min(nrblocks, nrblocks_step);
|
||||
nsbp->sb_rextents = nsbp->sb_rblocks;
|
||||
do_div(nsbp->sb_rextents, nsbp->sb_rextsize);
|
||||
ASSERT(nsbp->sb_rextents != 0);
|
||||
|
|
Loading…
Add table
Reference in a new issue