]> git.baikalelectronics.ru Git - kernel.git/commitdiff
btrfs: remove useless condition check before splitting leaf
authorFilipe Manana <fdmanana@suse.com>
Thu, 2 Dec 2021 10:30:37 +0000 (10:30 +0000)
committerDavid Sterba <dsterba@suse.com>
Fri, 7 Jan 2022 13:18:23 +0000 (14:18 +0100)
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 <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.c

index f12172cb6c35303b1b3500ec24d5fe4d17869a39..0e81f1847941c965a6b27081fe2dff7b5dc95478 100644 (file)
@@ -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);