diff options
| author | David Sterba <[email protected]> | 2024-08-27 02:05:48 +0000 |
|---|---|---|
| committer | David Sterba <[email protected]> | 2024-09-10 14:51:19 +0000 |
| commit | 276940915f232f8569124811fd8a9524f27f5748 (patch) | |
| tree | 3ed84fee9e666e802ba93c11f22847f046bb5d4b /fs/btrfs/compression.c | |
| parent | btrfs: rename __btrfs_run_defrag_inode() and drop double underscores (diff) | |
| download | kernel-276940915f232f8569124811fd8a9524f27f5748.tar.gz kernel-276940915f232f8569124811fd8a9524f27f5748.zip | |
btrfs: clear defragmented inodes using postorder in btrfs_cleanup_defrag_inodes()
btrfs_cleanup_defrag_inodes() is not called frequently, only in remount
or unmount, but the way it frees the inodes in fs_info->defrag_inodes
is inefficient. Each time it needs to locate first node, remove it,
potentially rebalance tree until it's done. This allows to do a
conditional reschedule.
For cleanups the rbtree_postorder_for_each_entry_safe() iterator is
convenient but we can't reschedule and restart iteration because some of
the tree nodes would be already freed.
The cleanup operation is kmem_cache_free() which will likely take the
fast path for most objects so rescheduling should not be necessary.
Reviewed-by: Qu Wenruo <[email protected]>
Signed-off-by: David Sterba <[email protected]>
Diffstat (limited to 'fs/btrfs/compression.c')
0 files changed, 0 insertions, 0 deletions
