mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 19:34:43 +01:00
Fix long_free_dirty accounting for small files (#16264)
For files smaller than recordsize, it's most likely that they don't have L1 blocks. However, current calculation will always return at least 1 L1 block. In this change, we check dnode level to figure out if it has L1 blocks or not, and return 0 if it doesn't. This will reduce the chance of unnecessary throttling when deleting a large number of small files. Signed-off-by: Chunwei Chen <[email protected]> Co-authored-by: Chunwei Chen <[email protected]> Reviewed-by: Alexander Motin <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]>
This commit is contained in:
1 parent
37275fd109
commit
9dfc5c4a0c
1 file changed
+7
@@ -815,6 +815,13 @@ get_next_chunk(dnode_t *dn, uint64_t *start, uint64_t minimum, uint64_t *l1blks)
|
||||
|
||||
ASSERT3U(minimum, <=, *start);
|
||||
|
||||
/* dn_nlevels == 1 means we don't have any L1 blocks */
|
||||
if (dn->dn_nlevels <= 1) {
|
||||
*l1blks = 0;
|
||||
*start = minimum;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if we can free the entire range assuming that all of the
|
||||
* L1 blocks in this range have data. If we can, we use this
|
||||
|
||||
Reference in new issue
Block a user