mirror of
https://github.com/torvalds/linux.git
synced 2026-09-13 06:23:02 +02:00
btrfs: restore active device pointers after failed sprout
btrfs_init_new_device() switches latest_dev and possibly s_bdev from the
seed device to the new sprout device before creating the first writable
chunks.
If chunk creation or the subsequent sprout setup fails, the error path
releases the new device without switching those pointers back.
btrfs_show_devname() can then dereference the freed latest_dev and crash.
Restore the active device pointers to the latest seed device before
removing and releasing the failed sprout device.
Fixes: b7cb29e666 ("btrfs: update latest_dev when we create a sprout device")
Assisted-by: Codex:gpt-5
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Guanghui Yang <3497809730@qq.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c93b3c43df
commit
e0b54613aa
|
|
@ -3035,6 +3035,8 @@ int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path
|
|||
error_sysfs:
|
||||
btrfs_sysfs_remove_device(device);
|
||||
mutex_lock(&fs_info->fs_devices->device_list_mutex);
|
||||
if (seeding_dev)
|
||||
btrfs_assign_next_active_device(device, seed_devices->latest_dev);
|
||||
mutex_lock(&fs_info->chunk_mutex);
|
||||
if (!list_empty(&device->post_commit_list))
|
||||
list_del_init(&device->post_commit_list);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user