• Qu Wenruo's avatar
    btrfs: make found_logical_ret parameter mandatory for function queue_scrub_stripe() · 47e2b06b
    Qu Wenruo authored
    [BUG]
    There is a compilation warning reported on commit ae76d8e3 ("btrfs:
    scrub: fix grouping of read IO"), where gcc (14.0.0 20231022 experimental)
    is reporting the following uninitialized variable:
    
      fs/btrfs/scrub.c: In function ‘scrub_simple_mirror.isra’:
      fs/btrfs/scrub.c:2075:29: error: ‘found_logical’ may be used uninitialized [-Werror=maybe-uninitialized[https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmaybe-uninitialized]]
       2075 |                 cur_logical = found_logical + BTRFS_STRIPE_LEN;
      fs/btrfs/scrub.c:2040:21: note: ‘found_logical’ was declared here
       2040 |                 u64 found_logical;
            |                     ^~~~~~~~~~~~~
    
    [CAUSE]
    This is a false alert, as @found_logical is passed as parameter
    @found_logical_ret of function queue_scrub_stripe().
    
    As long as queue_scrub_stripe() returned 0, we would update
    @found_logical_ret.  And if queue_scrub_stripe() returned >0 or <0, the
    caller would not utilized @found_logical, thus there should be nothing
    wrong.
    
    Although the triggering gcc is still experimental, it looks like the
    extra check on "if (found_logical_ret)" can sometimes confuse the
    compiler.
    
    Meanwhile the only caller of queue_scrub_stripe() is always passing a
    valid pointer, there is no need for such check at all.
    
    [FIX]
    Although the report itself is a false alert, we can still make it more
    explicit by:
    
    - Replace the check for @found_logical_ret with ASSERT()
    
    - Initialize @found_logical to U64_MAX
    
    - Add one extra ASSERT() to make sure @found_logical got updated
    
    Link: https://lore.kernel.org/linux-btrfs/87fs1x1p93.fsf@gentoo.org/
    Fixes: ae76d8e3 ("btrfs: scrub: fix grouping of read IO")
    Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    47e2b06b
scrub.c 88.7 KB