Commit 96f9b0f2 authored by Nikolay Borisov's avatar Nikolay Borisov Committed by David Sterba

btrfs: simplify checks when adding excluded ranges

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: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 9e22b925
...@@ -1741,25 +1741,12 @@ static int exclude_super_stripes(struct btrfs_block_group *cache) ...@@ -1741,25 +1741,12 @@ static int exclude_super_stripes(struct btrfs_block_group *cache)
return ret; return ret;
while (nr--) { while (nr--) {
u64 start, len; u64 len = min_t(u64, stripe_len,
cache->start + cache->length - logical[nr]);
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);
}
cache->bytes_super += len; 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) { if (ret) {
kfree(logical); kfree(logical);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment