aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/btrfs_inode.h
diff options
context:
space:
mode:
authorFilipe Manana <[email protected]>2023-09-28 10:12:49 +0000
committerDavid Sterba <[email protected]>2023-10-12 14:44:16 +0000
commitf66e0209bd914465c277c259472aa974cad94e3f (patch)
treea5597ff01522f134c2fe68eea223c09793382d5e /fs/btrfs/btrfs_inode.h
parentbtrfs: reorder btrfs_inode to fill gaps (diff)
downloadkernel-f66e0209bd914465c277c259472aa974cad94e3f.tar.gz
kernel-f66e0209bd914465c277c259472aa974cad94e3f.zip
btrfs: stop reserving excessive space for block group item updates
Space for block group item updates, necessary after allocating or deallocating an extent from a block group, is reserved in the delayed refs block reserve. Currently we do this by incrementing the transaction handle's delayed_ref_updates counter and then calling btrfs_update_delayed_refs_rsv(), which will increase the size of the delayed refs block reserve by an amount that corresponds to the same amount we use for delayed refs, given by btrfs_calc_delayed_ref_bytes(). That is an excessive amount because it corresponds to the amount of space needed to insert one item in a btree (btrfs_calc_insert_metadata_size()) times 2 when the free space tree feature is enabled. All we need is an amount as given by btrfs_calc_metadata_size(), since we only need to update an existing block group item in the extent tree (or block group tree if this feature is enabled). By using btrfs_calc_metadata_size() we will need to reserve 4 times less space when using the free space tree and 2 times less space when not using it, putting less pressure on space reservation. So use helpers to reserve and release space for block group item updates that use btrfs_calc_metadata_size() for calculation of the space. Signed-off-by: Filipe Manana <[email protected]> Signed-off-by: David Sterba <[email protected]>
Diffstat (limited to 'fs/btrfs/btrfs_inode.h')
0 files changed, 0 insertions, 0 deletions