btrfs: calculate physical_end using dev_extent_len directly in scrub_stripe()
authorQu Wenruo <wqu@suse.com>
Fri, 11 Mar 2022 07:38:41 +0000 (15:38 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 May 2022 15:17:30 +0000 (17:17 +0200)
The variable @physical_end is the exclusive stripe end, currently it's
calculated using @physical + @dev_extent_len / map->stripe_len *
 map->stripe_len.

And since at allocation time we ensured dev_extent_len is stripe_len
aligned, the result is the same as @physical + @dev_extent_len.

So this patch will just assign @physical and @physical_end early,
without using @nstripes.

This is especially helpful for any possible out: label user, as now we
only need to initialize @offset before going to out: label.

Since we're here, also make @physical_end constant.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/scrub.c

index 3985225..530913d 100644 (file)
@@ -3160,10 +3160,10 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
        int slot;
        u64 nstripes;
        struct extent_buffer *l;
-       u64 physical;
+       u64 physical = map->stripes[stripe_index].physical;
        u64 logical;
        u64 logic_end;
-       u64 physical_end;
+       const u64 physical_end = physical + dev_extent_len;
        u64 generation;
        int mirror_num;
        struct btrfs_key key;
@@ -3182,7 +3182,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
        int extent_mirror_num;
        int stop_loop = 0;
 
-       physical = map->stripes[stripe_index].physical;
        offset = 0;
        nstripes = div64_u64(dev_extent_len, map->stripe_len);
        mirror_num = 1;
@@ -3219,7 +3218,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
        path->reada = READA_FORWARD;
 
        logical = chunk_logical + offset;
-       physical_end = physical + nstripes * map->stripe_len;
        if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
                get_raid56_logic_offset(physical_end, stripe_index,
                                        map, &logic_end, NULL);