mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
xfs: don't let hidden_space go negative in xfs_metafile_resv_init
LOLLM points out that if the amount of fdblocks that we can reserve for
a metadata btree file goes below the space already used by that file,
then the hidden_space subtraction can underflow, causing
xfs_dec_fdblocks to subtract a huge amount of space. We never want the
target to be less than the used sapce, so fix the logic that adjusts
dblocks_avail downwards.
Also fix an error in the adjacent comment.
Cc: stable@vger.kernel.org # v6.15
Fixes: 1df8d75030 ("xfs: make metabtree reservations global")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
ffb48dccce
commit
476582d754
|
|
@ -297,14 +297,14 @@ xfs_metafile_resv_init(
|
|||
goto out_unlock;
|
||||
|
||||
/*
|
||||
* Space taken by the per-AG metadata btrees are accounted on-disk as
|
||||
* used space. We therefore only hide the space that is reserved but
|
||||
* not used by the trees.
|
||||
* Space taken by metadata btrees are accounted on-disk as used space.
|
||||
* We therefore only hide the space that is reserved but not used by
|
||||
* the trees.
|
||||
*/
|
||||
if (used > target)
|
||||
target = used;
|
||||
else if (target > dblocks_avail)
|
||||
target = dblocks_avail;
|
||||
target = max(dblocks_avail, used);
|
||||
hidden_space = target - used;
|
||||
|
||||
error = xfs_dec_fdblocks(mp, hidden_space, true);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user