xfs: move dax device handling into xfs_{alloc,free}_buftarg
authorChristoph Hellwig <hch@lst.de>
Mon, 29 Nov 2021 10:21:55 +0000 (11:21 +0100)
committerDan Williams <dan.j.williams@intel.com>
Sat, 4 Dec 2021 16:58:53 +0000 (08:58 -0800)
Hide the DAX device lookup from the xfs_super.c code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Link: https://lore.kernel.org/r/20211129102203.2243509-22-hch@lst.de
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
fs/xfs/xfs_buf.c
fs/xfs/xfs_buf.h
fs/xfs/xfs_super.c

index 631c5a6..4d4553f 100644 (file)
@@ -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
index 6b0200b..bd7f709 100644 (file)
@@ -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 *);
index c429720..3584cfc 100644 (file)
@@ -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;
 }