btrfs: simplify last record detection at test_range_bit_exists()
authorFilipe Manana <fdmanana@suse.com>
Tue, 1 Apr 2025 11:27:38 +0000 (12:27 +0100)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:41 +0000 (14:30 +0200)
Instead of keeping track of the minimum start offset of the next record
and detecting overflow every time we update that offset to be the sum of
current record's end offset plus one, we can simply exit when the current
record ends at or beyond our end offset and forget about updating the
start offset on every iteration and testing for it at the top of the loop.
This makes both the source code and assembly code simpler, more efficient
and shorter (reducing the object text size).

Also remove the pointless initialization to NULL of the state variable, as
we don't use it before the first assignment to it. This may help avoid
some warnings with clang tools such as the one reported/fixed by commit
966de47ff0c9 ("btrfs: remove redundant initialization of variables in
log_new_ancestors").

Reviewed-by: Boris Burkov <boris@bur.io>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-io-tree.c

index a9b163269252bbeed90f58ac21ab1fde7c4a048d..3c138e6c23978459542c85f69257bf4e22fbf0d8 100644 (file)
@@ -1720,14 +1720,14 @@ search:
  */
 bool test_range_bit_exists(struct extent_io_tree *tree, u64 start, u64 end, u32 bit)
 {
-       struct extent_state *state = NULL;
+       struct extent_state *state;
        bool bitset = false;
 
        ASSERT(is_power_of_2(bit));
 
        spin_lock(&tree->lock);
        state = tree_search(tree, start);
-       while (state && start <= end) {
+       while (state) {
                if (state->start > end)
                        break;
 
@@ -1736,9 +1736,7 @@ bool test_range_bit_exists(struct extent_io_tree *tree, u64 start, u64 end, u32
                        break;
                }
 
-               /* If state->end is (u64)-1, start will overflow to 0 */
-               start = state->end + 1;
-               if (start > end || start == 0)
+               if (state->end >= end)
                        break;
                state = next_state(state);
        }