From e5e1c1741b3de3f8d06fe4b700d83709a7da0610 Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Thu, 2 Dec 2021 10:30:37 +0000 Subject: [PATCH] btrfs: remove useless condition check before splitting leaf When inserting a key, we check if the write_lock_level is less than 1, and if so we set it to 1, release the path and retry the tree traversal. However that is unnecessary, because when ins_len is greater than 0, we know that write_lock_level can never be less than 1. The logic to retry is also buggy, because in case ins_len was decremented, due to an exact key match and the search is not meant for item extension (path->search_for_extension is 0), we retry without incrementing ins_len, which would make the next retry decrement it again by the same amount. So remove the check for write_lock_level being less than 1 and add an assertion to assert it's always >= 1. Reviewed-by: Josef Bacik Signed-off-by: Filipe Manana Signed-off-by: David Sterba --- fs/btrfs/ctree.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index f12172cb6c35..0e81f1847941 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1969,11 +1969,7 @@ skip_leaf_search: ins_len -= sizeof(struct btrfs_item); } if (ins_len > 0 && leaf_free_space < ins_len) { - if (write_lock_level < 1) { - write_lock_level = 1; - btrfs_release_path(p); - goto again; - } + ASSERT(write_lock_level >= 1); err = split_leaf(trans, root, key, p, ins_len, ret == 0); -- 2.25.1