diff options
Diffstat (limited to 'fs/btrfs/dev-replace.c')
| -rw-r--r-- | fs/btrfs/dev-replace.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index 7ba7b3900cb8..4253ad580e39 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c @@ -313,6 +313,11 @@ int btrfs_dev_replace_start(struct btrfs_root *root,  	struct btrfs_device *tgt_device = NULL;  	struct btrfs_device *src_device = NULL; +	if (btrfs_fs_incompat(fs_info, RAID56)) { +		pr_warn("btrfs: dev_replace cannot yet handle RAID5/RAID6\n"); +		return -EINVAL; +	} +  	switch (args->start.cont_reading_from_srcdev_mode) {  	case BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS:  	case BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_AVOID: @@ -395,7 +400,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root,  	args->result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;  	btrfs_dev_replace_unlock(dev_replace); -	btrfs_wait_ordered_extents(root, 0); +	btrfs_wait_all_ordered_extents(root->fs_info, 0);  	/* force writing the updated state information to disk */  	trans = btrfs_start_transaction(root, 0); @@ -465,12 +470,12 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,  	 * flush all outstanding I/O and inode extent mappings before the  	 * copy operation is declared as being finished  	 */ -	ret = btrfs_start_delalloc_inodes(root, 0); +	ret = btrfs_start_all_delalloc_inodes(root->fs_info, 0);  	if (ret) {  		mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);  		return ret;  	} -	btrfs_wait_ordered_extents(root, 0); +	btrfs_wait_all_ordered_extents(root->fs_info, 0);  	trans = btrfs_start_transaction(root, 0);  	if (IS_ERR(trans)) { | 
