diff options
Diffstat (limited to 'fs/btrfs/dev-replace.c')
| -rw-r--r-- | fs/btrfs/dev-replace.c | 14 | 
1 files changed, 8 insertions, 6 deletions
| diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index fff22ed55c42..6b5b6cec13c4 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c @@ -247,6 +247,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,  {  	struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;  	struct btrfs_device *device; +	struct bdev_handle *bdev_handle;  	struct block_device *bdev;  	u64 devid = BTRFS_DEV_REPLACE_DEVID;  	int ret = 0; @@ -257,12 +258,13 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,  		return -EINVAL;  	} -	bdev = blkdev_get_by_path(device_path, BLK_OPEN_WRITE, -				  fs_info->bdev_holder, NULL); -	if (IS_ERR(bdev)) { +	bdev_handle = bdev_open_by_path(device_path, BLK_OPEN_WRITE, +					fs_info->bdev_holder, NULL); +	if (IS_ERR(bdev_handle)) {  		btrfs_err(fs_info, "target device %s is invalid!", device_path); -		return PTR_ERR(bdev); +		return PTR_ERR(bdev_handle);  	} +	bdev = bdev_handle->bdev;  	if (!btrfs_check_device_zone_type(fs_info, bdev)) {  		btrfs_err(fs_info, @@ -313,9 +315,9 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,  	device->commit_bytes_used = device->bytes_used;  	device->fs_info = fs_info;  	device->bdev = bdev; +	device->bdev_handle = bdev_handle;  	set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);  	set_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state); -	device->holder = fs_info->bdev_holder;  	device->dev_stats_valid = 1;  	set_blocksize(device->bdev, BTRFS_BDEV_BLOCKSIZE);  	device->fs_devices = fs_devices; @@ -334,7 +336,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,  	return 0;  error: -	blkdev_put(bdev, fs_info->bdev_holder); +	bdev_release(bdev_handle);  	return ret;  } | 
