• Anand Jain's avatar
    btrfs: drop never met disk total bytes check in verify_one_dev_extent · 3a160a93
    Anand Jain authored
    Drop the condition in verify_one_dev_extent,
    btrfs_device::disk_total_bytes is set even for a seed device. The
    comment is wrong, the size is properly set when cloning the device.
    
    Commit 1b3922a8 ("btrfs: Use real device structure to verify
    dev extent") introduced it but it's unclear why the total_disk_bytes
    was 0.
    
    Theoretically, all devices (including missing and seed) marked with the
    BTRFS_DEV_STATE_IN_FS_METADATA flag gets the total_disk_bytes updated at
    fill_device_from_item():
    
      open_ctree()
        btrfs_read_chunk_tree()
          read_one_dev()
            open_seed_device()
            fill_device_from_item()
    
    Even if verify_one_dev_extent() reports total_disk_bytes == 0, then its
    a bug to be fixed somewhere else and not in verify_one_dev_extent() as
    it's just a messenger. It is never expected that a total_disk_bytes
    shall be zero.
    
    The function fill_device_from_item() does the job of reading it from the
    item and updating btrfs_device::disk_total_bytes. So both the missing
    device and the seed devices do have their disk_total_bytes updated.
    btrfs_find_device can also return a device from fs_info->seed_list
    because it searches it as well.
    
    Furthermore, while removing the device if there is a power loss, we
    could have a device with its total_bytes = 0, that's still valid.
    
    Instead, introduce a check against maximum block device size in
    read_one_dev().
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    3a160a93
volumes.c 206 KB