Re: [PATCH v2 05/34] swap: port block device usage to file

Jan Kara
2024-01-31T18:16:25Z

On Tue 23-01-24 14:26:22, Christian Brauner wrote:
> Signed-off-by: Christian Brauner <brauner@kernel.org>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

Honza

> ---
> include/linux/swap.h | 2 +-
> mm/swapfile.c | 22 +++++++++++-----------
> 2 files changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/include/linux/swap.h b/include/linux/swap.h
> index 4db00ddad261..e5b82bc05e60 100644
> --- a/include/linux/swap.h
> +++ b/include/linux/swap.h
> @@ -298,7 +298,7 @@ struct swap_info_struct {
> unsigned int __percpu *cluster_next_cpu; /*percpu index for next allocation */
> struct percpu_cluster __percpu *percpu_cluster; /* per cpu's swap location */
> struct rb_root swap_extent_root;/* root of the swap extent rbtree */
> - struct bdev_handle *bdev_handle;/* open handle of the bdev */
> + struct file *bdev_file; /* open handle of the bdev */
> struct block_device *bdev; /* swap device or bdev of swap file */
> struct file *swap_file; /* seldom referenced */
> unsigned int old_block_size; /* seldom referenced */
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index 556ff7347d5f..73edd6fed6a2 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -2532,10 +2532,10 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
> exit_swap_address_space(p->type);
>
> inode = mapping->host;
> - if (p->bdev_handle) {
> + if (p->bdev_file) {
> set_blocksize(p->bdev, old_block_size);
> - bdev_release(p->bdev_handle);
> - p->bdev_handle = NULL;
> + fput(p->bdev_file);
> + p->bdev_file = NULL;
> }
>
> inode_lock(inode);
> @@ -2765,14 +2765,14 @@ static int claim_swapfile(struct swap_info_struct *p, struct inode *inode)
> int error;
>
> if (S_ISBLK(inode->i_mode)) {
> - p->bdev_handle = bdev_open_by_dev(inode->i_rdev,
> + p->bdev_file = bdev_file_open_by_dev(inode->i_rdev,
> BLK_OPEN_READ | BLK_OPEN_WRITE, p, NULL);
> - if (IS_ERR(p->bdev_handle)) {
> - error = PTR_ERR(p->bdev_handle);
> - p->bdev_handle = NULL;
> + if (IS_ERR(p->bdev_file)) {
> + error = PTR_ERR(p->bdev_file);
> + p->bdev_file = NULL;
> return error;
> }
> - p->bdev = p->bdev_handle->bdev;
> + p->bdev = file_bdev(p->bdev_file);
> p->old_block_size = block_size(p->bdev);
> error = set_blocksize(p->bdev, PAGE_SIZE);
> if (error < 0)
> @@ -3208,10 +3208,10 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
> p->percpu_cluster = NULL;
> free_percpu(p->cluster_next_cpu);
> p->cluster_next_cpu = NULL;
> - if (p->bdev_handle) {
> + if (p->bdev_file) {
> set_blocksize(p->bdev, p->old_block_size);
> - bdev_release(p->bdev_handle);
> - p->bdev_handle = NULL;
> + fput(p->bdev_file);
> + p->bdev_file = NULL;
> }
> inode = NULL;
> destroy_swap_extents(p);
>
> --
> 2.43.0
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR