• Anand Jain's avatar
    btrfs: consolidate device_list_mutex in prepare_sprout to its parent · 849eae5e
    Anand Jain authored
    
    
    btrfs_prepare_sprout() splices seed devices into its own struct fs_devices,
    so that its parent function btrfs_init_new_device() can add the new sprout
    device to fs_info->fs_devices.
    
    Both btrfs_prepare_sprout() and btrfs_init_new_device() need
    device_list_mutex. But they are holding it separately, thus create a
    small race window. Close it and hold device_list_mutex across both
    functions btrfs_init_new_device() and btrfs_prepare_sprout().
    
    Split btrfs_prepare_sprout() into btrfs_init_sprout() and
    btrfs_setup_sprout(). This split is essential because device_list_mutex
    must not be held for allocations in btrfs_init_sprout() but must be held
    for btrfs_setup_sprout(). So now a common device_list_mutex can be used
    between btrfs_init_new_device() and btrfs_setup_sprout().
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.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>
    849eae5e
volumes.c 224 KB