btrfs: simplify checks when adding excluded ranges
authorNikolay Borisov <nborisov@suse.com>
Fri, 3 Apr 2020 13:40:35 +0000 (16:40 +0300)
committerDavid Sterba <dsterba@suse.com>
Mon, 27 Jul 2020 10:55:20 +0000 (12:55 +0200)
Adresses held in 'logical' array are always guaranteed to fall within
the boundaries of the block group. That is, 'start' can never be
smaller than cache->start. This invariant follows from the way the
address are calculated in btrfs_rmap_block:

    stripe_nr = physical - map->stripes[i].physical;
    stripe_nr = div64_u64(stripe_nr, map->stripe_len);
    bytenr = chunk_start + stripe_nr * io_stripe_size;

I.e it's always some IO stripe within the given chunk.

Exploit this invariant to simplify the body of the loop by removing the
unnecessary 'if' since its 'else' part is the one always executed.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c

index 956ae6283d33283f9b3e3916e48a16975c343b0c..e29e9629b246bf3e38c36c5741ca4637c0a5cc89 100644 (file)
@@ -1741,25 +1741,12 @@ static int exclude_super_stripes(struct btrfs_block_group *cache)
                        return ret;
 
                while (nr--) {
-                       u64 start, len;
-
-                       if (logical[nr] > cache->start + cache->length)
-                               continue;
-
-                       if (logical[nr] + stripe_len <= cache->start)
-                               continue;
-
-                       start = logical[nr];
-                       if (start < cache->start) {
-                               start = cache->start;
-                               len = (logical[nr] + stripe_len) - start;
-                       } else {
-                               len = min_t(u64, stripe_len,
-                                           cache->start + cache->length - start);
-                       }
+                       u64 len = min_t(u64, stripe_len,
+                               cache->start + cache->length - logical[nr]);
 
                        cache->bytes_super += len;
-                       ret = btrfs_add_excluded_extent(fs_info, start, len);
+                       ret = btrfs_add_excluded_extent(fs_info, logical[nr],
+                                                       len);
                        if (ret) {
                                kfree(logical);
                                return ret;