• Josef Bacik's avatar
    btrfs: make sure to initialize start and len in find_free_dev_extent · 20218dfb
    Josef Bacik authored
    Jens reported a compiler error when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y
    that looks like this
    
      In function ‘gather_device_info’,
          inlined from ‘btrfs_create_chunk’ at fs/btrfs/volumes.c:5507:8:
      fs/btrfs/volumes.c:5245:48: warning: ‘dev_offset’ may be used uninitialized [-Wmaybe-uninitialized]
       5245 |                 devices_info[ndevs].dev_offset = dev_offset;
    	|                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
      fs/btrfs/volumes.c: In function ‘btrfs_create_chunk’:
      fs/btrfs/volumes.c:5196:13: note: ‘dev_offset’ was declared here
       5196 |         u64 dev_offset;
    
    This occurs because find_free_dev_extent is responsible for setting
    dev_offset, however if we get an -ENOMEM at the top of the function
    we'll return without setting the value.
    
    This isn't actually a problem because we will see the -ENOMEM in
    gather_device_info() and return and not use the uninitialized value,
    however we also just don't want the compiler warning so rework the code
    slightly in find_free_dev_extent() to make sure it's always setting
    *start and *len to avoid the compiler warning.
    Reported-by: default avatarJens Axboe <axboe@kernel.dk>
    Tested-by: default avatarJens Axboe <axboe@kernel.dk>
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    20218dfb
volumes.c 217 KB