mirror of
https://github.com/torvalds/linux.git
synced 2024-11-06 20:21:57 +00:00
Btrfs: Fix the problem that the replace destroys the seed filesystem
The seed filesystem was destroyed by the device replace, the reproduce method is: # mkfs.btrfs -f <dev0> # btrfstune -S 1 <dev0> # mount <dev0> <mnt> # btrfs device add <dev1> <mnt> # umount <mnt> # mount <dev1> <mnt> # btrfs replace start -f <dev0> <dev2> <mnt> # umount <mnt> # mount <dev0> <mnt> It is because we erase the super block on the seed device. It is wrong, we should not change anything on the seed device. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Reviewed-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
2c91943b50
commit
ff61d17c63
@ -1848,8 +1848,12 @@ void btrfs_rm_dev_replace_srcdev(struct btrfs_fs_info *fs_info,
|
||||
if (srcdev->bdev) {
|
||||
fs_info->fs_devices->open_devices--;
|
||||
|
||||
/* zero out the old super */
|
||||
btrfs_scratch_superblock(srcdev);
|
||||
/*
|
||||
* zero out the old super if it is not writable
|
||||
* (e.g. seed device)
|
||||
*/
|
||||
if (srcdev->writeable)
|
||||
btrfs_scratch_superblock(srcdev);
|
||||
}
|
||||
|
||||
call_rcu(&srcdev->rcu, free_device);
|
||||
|
Loading…
Reference in New Issue
Block a user