Commit 86ec15d0 authored by Jan Kara's avatar Jan Kara Committed by Christian Brauner

btrfs: Convert to bdev_open_by_path()

Convert btrfs to use bdev_open_by_path() and pass the handle around.  We
also drop the holder from struct btrfs_device as it is now not needed
anymore.

CC: David Sterba <dsterba@suse.com>
CC: linux-btrfs@vger.kernel.org
Acked-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230927093442.25915-20-jack@suse.czSigned-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent f4a48bc3
...@@ -247,6 +247,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, ...@@ -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_fs_devices *fs_devices = fs_info->fs_devices;
struct btrfs_device *device; struct btrfs_device *device;
struct bdev_handle *bdev_handle;
struct block_device *bdev; struct block_device *bdev;
u64 devid = BTRFS_DEV_REPLACE_DEVID; u64 devid = BTRFS_DEV_REPLACE_DEVID;
int ret = 0; int ret = 0;
...@@ -257,12 +258,13 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, ...@@ -257,12 +258,13 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,
return -EINVAL; return -EINVAL;
} }
bdev = blkdev_get_by_path(device_path, BLK_OPEN_WRITE, bdev_handle = bdev_open_by_path(device_path, BLK_OPEN_WRITE,
fs_info->bdev_holder, NULL); fs_info->bdev_holder, NULL);
if (IS_ERR(bdev)) { if (IS_ERR(bdev_handle)) {
btrfs_err(fs_info, "target device %s is invalid!", device_path); 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)) { if (!btrfs_check_device_zone_type(fs_info, bdev)) {
btrfs_err(fs_info, btrfs_err(fs_info,
...@@ -313,9 +315,9 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *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->commit_bytes_used = device->bytes_used;
device->fs_info = fs_info; device->fs_info = fs_info;
device->bdev = bdev; device->bdev = bdev;
device->bdev_handle = bdev_handle;
set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state); set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
set_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state); set_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
device->holder = fs_info->bdev_holder;
device->dev_stats_valid = 1; device->dev_stats_valid = 1;
set_blocksize(device->bdev, BTRFS_BDEV_BLOCKSIZE); set_blocksize(device->bdev, BTRFS_BDEV_BLOCKSIZE);
device->fs_devices = fs_devices; device->fs_devices = fs_devices;
...@@ -334,7 +336,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, ...@@ -334,7 +336,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,
return 0; return 0;
error: error:
blkdev_put(bdev, fs_info->bdev_holder); bdev_release(bdev_handle);
return ret; return ret;
} }
......
...@@ -2676,8 +2676,7 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg) ...@@ -2676,8 +2676,7 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
struct inode *inode = file_inode(file); struct inode *inode = file_inode(file);
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_ioctl_vol_args_v2 *vol_args; struct btrfs_ioctl_vol_args_v2 *vol_args;
struct block_device *bdev = NULL; struct bdev_handle *bdev_handle = NULL;
void *holder;
int ret; int ret;
bool cancel = false; bool cancel = false;
...@@ -2714,7 +2713,7 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg) ...@@ -2714,7 +2713,7 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
goto err_drop; goto err_drop;
/* Exclusive operation is now claimed */ /* Exclusive operation is now claimed */
ret = btrfs_rm_device(fs_info, &args, &bdev, &holder); ret = btrfs_rm_device(fs_info, &args, &bdev_handle);
btrfs_exclop_finish(fs_info); btrfs_exclop_finish(fs_info);
...@@ -2728,8 +2727,8 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg) ...@@ -2728,8 +2727,8 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
} }
err_drop: err_drop:
mnt_drop_write_file(file); mnt_drop_write_file(file);
if (bdev) if (bdev_handle)
blkdev_put(bdev, holder); bdev_release(bdev_handle);
out: out:
btrfs_put_dev_args_from_path(&args); btrfs_put_dev_args_from_path(&args);
kfree(vol_args); kfree(vol_args);
...@@ -2742,8 +2741,7 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg) ...@@ -2742,8 +2741,7 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg)
struct inode *inode = file_inode(file); struct inode *inode = file_inode(file);
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_ioctl_vol_args *vol_args; struct btrfs_ioctl_vol_args *vol_args;
struct block_device *bdev = NULL; struct bdev_handle *bdev_handle = NULL;
void *holder;
int ret; int ret;
bool cancel = false; bool cancel = false;
...@@ -2770,15 +2768,15 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg) ...@@ -2770,15 +2768,15 @@ static long btrfs_ioctl_rm_dev(struct file *file, void __user *arg)
ret = exclop_start_or_cancel_reloc(fs_info, BTRFS_EXCLOP_DEV_REMOVE, ret = exclop_start_or_cancel_reloc(fs_info, BTRFS_EXCLOP_DEV_REMOVE,
cancel); cancel);
if (ret == 0) { if (ret == 0) {
ret = btrfs_rm_device(fs_info, &args, &bdev, &holder); ret = btrfs_rm_device(fs_info, &args, &bdev_handle);
if (!ret) if (!ret)
btrfs_info(fs_info, "disk deleted %s", vol_args->name); btrfs_info(fs_info, "disk deleted %s", vol_args->name);
btrfs_exclop_finish(fs_info); btrfs_exclop_finish(fs_info);
} }
mnt_drop_write_file(file); mnt_drop_write_file(file);
if (bdev) if (bdev_handle)
blkdev_put(bdev, holder); bdev_release(bdev_handle);
out: out:
btrfs_put_dev_args_from_path(&args); btrfs_put_dev_args_from_path(&args);
kfree(vol_args); kfree(vol_args);
......
This diff is collapsed.
...@@ -90,13 +90,11 @@ struct btrfs_device { ...@@ -90,13 +90,11 @@ struct btrfs_device {
u64 generation; u64 generation;
struct bdev_handle *bdev_handle;
struct block_device *bdev; struct block_device *bdev;
struct btrfs_zoned_device_info *zone_info; struct btrfs_zoned_device_info *zone_info;
/* block device holder for blkdev_get/put */
void *holder;
/* /*
* Device's major-minor number. Must be set even if the device is not * Device's major-minor number. Must be set even if the device is not
* opened (bdev == NULL), unless the device is missing. * opened (bdev == NULL), unless the device is missing.
...@@ -629,7 +627,7 @@ struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, ...@@ -629,7 +627,7 @@ struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
void btrfs_put_dev_args_from_path(struct btrfs_dev_lookup_args *args); void btrfs_put_dev_args_from_path(struct btrfs_dev_lookup_args *args);
int btrfs_rm_device(struct btrfs_fs_info *fs_info, int btrfs_rm_device(struct btrfs_fs_info *fs_info,
struct btrfs_dev_lookup_args *args, struct btrfs_dev_lookup_args *args,
struct block_device **bdev, void **holder); struct bdev_handle **bdev_handle);
void __exit btrfs_cleanup_fs_uuids(void); void __exit btrfs_cleanup_fs_uuids(void);
int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len); int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len);
int btrfs_grow_device(struct btrfs_trans_handle *trans, int btrfs_grow_device(struct btrfs_trans_handle *trans,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment