diff options
Diffstat (limited to 'fs/btrfs/dev-replace.c')
| -rw-r--r-- | fs/btrfs/dev-replace.c | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index 4a0243cb9d97..5b9e3f3ace22 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c @@ -688,6 +688,9 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,  	}  	btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1); +	if (!scrub_ret) +		btrfs_reada_remove_dev(src_device); +  	/*  	 * We have to use this loop approach because at this point src_device  	 * has to be available for transaction commit to complete, yet new @@ -696,6 +699,7 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,  	while (1) {  		trans = btrfs_start_transaction(root, 0);  		if (IS_ERR(trans)) { +			btrfs_reada_undo_remove_dev(src_device);  			mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);  			return PTR_ERR(trans);  		} @@ -746,6 +750,7 @@ error:  		up_write(&dev_replace->rwsem);  		mutex_unlock(&fs_info->chunk_mutex);  		mutex_unlock(&fs_info->fs_devices->device_list_mutex); +		btrfs_reada_undo_remove_dev(src_device);  		btrfs_rm_dev_replace_blocked(fs_info);  		if (tgt_device)  			btrfs_destroy_dev_replace_tgtdev(tgt_device); | 
