]> git.ipfire.org Git - people/ms/linux.git/commit - fs/xfs/xfs_fsops.c
xfs: fix overfilling of reserve pool
authorDarrick J. Wong <djwong@kernel.org>
Thu, 24 Mar 2022 17:57:07 +0000 (10:57 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Mon, 28 Mar 2022 15:39:02 +0000 (08:39 -0700)
commit82be38bcf8a2e056b4c99ce79a3827fa743df6ec
tree58a8d352dd961cee56aa0b28f84df3429977eed3
parent0baa2657dc4d79202148be79a3dc36c35f425060
xfs: fix overfilling of reserve pool

Due to cycling of m_sb_lock, it's possible for multiple callers of
xfs_reserve_blocks to race at changing the pool size, subtracting blocks
from fdblocks, and actually putting it in the pool.  The result of all
this is that we can overfill the reserve pool to hilarious levels.

xfs_mod_fdblocks, when called with a positive value, already knows how
to take freed blocks and either fill the reserve until it's full, or put
them in fdblocks.  Use that instead of setting m_resblks_avail directly.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
fs/xfs/xfs_fsops.c