From: Filipe Manana Date: Fri, 22 Sep 2023 10:39:08 +0000 (+0100) Subject: btrfs: use extent_io_tree_release() to empty dirty log pages X-Git-Tag: v6.7-rc1~202^2~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0f8ac74d41c01700dbd1240bc4de9700fb281753;p=thirdparty%2Fkernel%2Flinux.git btrfs: use extent_io_tree_release() to empty dirty log pages When freeing a log tree, during a transaction commit, we clear its dirty log pages io tree by calling clear_extent_bits() using a range from 0 to (u64)-1. This will iterate the io tree's rbtree and call rb_erase() on each node before freeing it, which will often trigger rebalance operations on the rbtree. A better alternative it to use extent_io_tree_release(), which will not do deletions and trigger rebalances. So use extent_io_tree_release() instead of clear_extent_bits(). Signed-off-by: Filipe Manana Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index a14ac1a964e28..6b98e0dbc0a4e 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3208,8 +3208,7 @@ static void free_log_tree(struct btrfs_trans_handle *trans, } } - clear_extent_bits(&log->dirty_log_pages, 0, (u64)-1, - EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT); + extent_io_tree_release(&log->dirty_log_pages); extent_io_tree_release(&log->log_csum_range); btrfs_put_root(log);