[PATCH 21/29] xfs: move dax device handling into xfs_{alloc,free}_buftarg

Darrick J. Wong djwong at kernel.org
Wed Nov 24 09:55:48 AEDT 2021


On Tue, Nov 09, 2021 at 09:33:01AM +0100, Christoph Hellwig wrote:
> Hide the DAX device lookup from the xfs_super.c code.
> 
> Reviewed-by: Christoph Hellwig <hch at lst.de>

This looks to be a straightforward conversion.
Reviewed-by: Darrick J. Wong <djwong at kernel.org>

--D

> ---
>  fs/xfs/xfs_buf.c   |  8 ++++----
>  fs/xfs/xfs_buf.h   |  4 ++--
>  fs/xfs/xfs_super.c | 26 +++++---------------------
>  3 files changed, 11 insertions(+), 27 deletions(-)
> 
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index 631c5a61d89b7..4d4553ffa7050 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -1892,6 +1892,7 @@ xfs_free_buftarg(
>  	list_lru_destroy(&btp->bt_lru);
>  
>  	blkdev_issue_flush(btp->bt_bdev);
> +	fs_put_dax(btp->bt_daxdev);
>  
>  	kmem_free(btp);
>  }
> @@ -1932,11 +1933,10 @@ xfs_setsize_buftarg_early(
>  	return xfs_setsize_buftarg(btp, bdev_logical_block_size(bdev));
>  }
>  
> -xfs_buftarg_t *
> +struct xfs_buftarg *
>  xfs_alloc_buftarg(
>  	struct xfs_mount	*mp,
> -	struct block_device	*bdev,
> -	struct dax_device	*dax_dev)
> +	struct block_device	*bdev)
>  {
>  	xfs_buftarg_t		*btp;
>  
> @@ -1945,7 +1945,7 @@ xfs_alloc_buftarg(
>  	btp->bt_mount = mp;
>  	btp->bt_dev =  bdev->bd_dev;
>  	btp->bt_bdev = bdev;
> -	btp->bt_daxdev = dax_dev;
> +	btp->bt_daxdev = fs_dax_get_by_bdev(bdev);
>  
>  	/*
>  	 * Buffer IO error rate limiting. Limit it to no more than 10 messages
> diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
> index 6b0200b8007d1..bd7f709f0d232 100644
> --- a/fs/xfs/xfs_buf.h
> +++ b/fs/xfs/xfs_buf.h
> @@ -338,8 +338,8 @@ xfs_buf_update_cksum(struct xfs_buf *bp, unsigned long cksum_offset)
>  /*
>   *	Handling of buftargs.
>   */
> -extern struct xfs_buftarg *xfs_alloc_buftarg(struct xfs_mount *,
> -		struct block_device *, struct dax_device *);
> +struct xfs_buftarg *xfs_alloc_buftarg(struct xfs_mount *mp,
> +		struct block_device *bdev);
>  extern void xfs_free_buftarg(struct xfs_buftarg *);
>  extern void xfs_buftarg_wait(struct xfs_buftarg *);
>  extern void xfs_buftarg_drain(struct xfs_buftarg *);
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index 3a45d5caa28d5..7262716afb215 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -391,26 +391,19 @@ STATIC void
>  xfs_close_devices(
>  	struct xfs_mount	*mp)
>  {
> -	struct dax_device *dax_ddev = mp->m_ddev_targp->bt_daxdev;
> -
>  	if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
>  		struct block_device *logdev = mp->m_logdev_targp->bt_bdev;
> -		struct dax_device *dax_logdev = mp->m_logdev_targp->bt_daxdev;
>  
>  		xfs_free_buftarg(mp->m_logdev_targp);
>  		xfs_blkdev_put(logdev);
> -		fs_put_dax(dax_logdev);
>  	}
>  	if (mp->m_rtdev_targp) {
>  		struct block_device *rtdev = mp->m_rtdev_targp->bt_bdev;
> -		struct dax_device *dax_rtdev = mp->m_rtdev_targp->bt_daxdev;
>  
>  		xfs_free_buftarg(mp->m_rtdev_targp);
>  		xfs_blkdev_put(rtdev);
> -		fs_put_dax(dax_rtdev);
>  	}
>  	xfs_free_buftarg(mp->m_ddev_targp);
> -	fs_put_dax(dax_ddev);
>  }
>  
>  /*
> @@ -428,8 +421,6 @@ xfs_open_devices(
>  	struct xfs_mount	*mp)
>  {
>  	struct block_device	*ddev = mp->m_super->s_bdev;
> -	struct dax_device	*dax_ddev = fs_dax_get_by_bdev(ddev);
> -	struct dax_device	*dax_logdev = NULL, *dax_rtdev = NULL;
>  	struct block_device	*logdev = NULL, *rtdev = NULL;
>  	int			error;
>  
> @@ -439,8 +430,7 @@ xfs_open_devices(
>  	if (mp->m_logname) {
>  		error = xfs_blkdev_get(mp, mp->m_logname, &logdev);
>  		if (error)
> -			goto out;
> -		dax_logdev = fs_dax_get_by_bdev(logdev);
> +			return error;
>  	}
>  
>  	if (mp->m_rtname) {
> @@ -454,25 +444,24 @@ xfs_open_devices(
>  			error = -EINVAL;
>  			goto out_close_rtdev;
>  		}
> -		dax_rtdev = fs_dax_get_by_bdev(rtdev);
>  	}
>  
>  	/*
>  	 * Setup xfs_mount buffer target pointers
>  	 */
>  	error = -ENOMEM;
> -	mp->m_ddev_targp = xfs_alloc_buftarg(mp, ddev, dax_ddev);
> +	mp->m_ddev_targp = xfs_alloc_buftarg(mp, ddev);
>  	if (!mp->m_ddev_targp)
>  		goto out_close_rtdev;
>  
>  	if (rtdev) {
> -		mp->m_rtdev_targp = xfs_alloc_buftarg(mp, rtdev, dax_rtdev);
> +		mp->m_rtdev_targp = xfs_alloc_buftarg(mp, rtdev);
>  		if (!mp->m_rtdev_targp)
>  			goto out_free_ddev_targ;
>  	}
>  
>  	if (logdev && logdev != ddev) {
> -		mp->m_logdev_targp = xfs_alloc_buftarg(mp, logdev, dax_logdev);
> +		mp->m_logdev_targp = xfs_alloc_buftarg(mp, logdev);
>  		if (!mp->m_logdev_targp)
>  			goto out_free_rtdev_targ;
>  	} else {
> @@ -488,14 +477,9 @@ xfs_open_devices(
>  	xfs_free_buftarg(mp->m_ddev_targp);
>   out_close_rtdev:
>  	xfs_blkdev_put(rtdev);
> -	fs_put_dax(dax_rtdev);
>   out_close_logdev:
> -	if (logdev && logdev != ddev) {
> +	if (logdev && logdev != ddev)
>  		xfs_blkdev_put(logdev);
> -		fs_put_dax(dax_logdev);
> -	}
> - out:
> -	fs_put_dax(dax_ddev);
>  	return error;
>  }
>  
> -- 
> 2.30.2
> 


More information about the Linux-erofs mailing list