return container_of(ctx, struct xfs_writepage_ctx, ctx);
 }
 
-struct block_device *
-xfs_find_bdev_for_inode(
-       struct inode            *inode)
-{
-       struct xfs_inode        *ip = XFS_I(inode);
-       struct xfs_mount        *mp = ip->i_mount;
-
-       if (XFS_IS_REALTIME_INODE(ip))
-               return mp->m_rtdev_targp->bt_bdev;
-       else
-               return mp->m_ddev_targp->bt_bdev;
-}
-
-struct dax_device *
-xfs_find_daxdev_for_inode(
-       struct inode            *inode)
-{
-       struct xfs_inode        *ip = XFS_I(inode);
-       struct xfs_mount        *mp = ip->i_mount;
-
-       if (XFS_IS_REALTIME_INODE(ip))
-               return mp->m_rtdev_targp->bt_daxdev;
-       else
-               return mp->m_ddev_targp->bt_daxdev;
-}
-
 /*
  * Fast and loose check if this write could update the on-disk inode size.
  */
        struct address_space    *mapping,
        struct writeback_control *wbc)
 {
-       xfs_iflags_clear(XFS_I(mapping->host), XFS_ITRUNCATED);
+       struct xfs_inode        *ip = XFS_I(mapping->host);
+
+       xfs_iflags_clear(ip, XFS_ITRUNCATED);
        return dax_writeback_mapping_range(mapping,
-                       xfs_find_bdev_for_inode(mapping->host), wbc);
+                       xfs_inode_buftarg(ip)->bt_bdev, wbc);
 }
 
 STATIC sector_t
        struct file                     *swap_file,
        sector_t                        *span)
 {
-       sis->bdev = xfs_find_bdev_for_inode(file_inode(swap_file));
+       sis->bdev = xfs_inode_buftarg(XFS_I(file_inode(swap_file)))->bt_bdev;
        return iomap_swapfile_activate(sis, swap_file, span,
                        &xfs_read_iomap_ops);
 }
 
 
 int    xfs_setfilesize(struct xfs_inode *ip, xfs_off_t offset, size_t size);
 
-extern struct block_device *xfs_find_bdev_for_inode(struct inode *);
-extern struct dax_device *xfs_find_daxdev_for_inode(struct inode *);
-
 #endif /* __XFS_AOPS_H__ */
 
  */
 int
 xfs_zero_extent(
-       struct xfs_inode *ip,
-       xfs_fsblock_t   start_fsb,
-       xfs_off_t       count_fsb)
+       struct xfs_inode        *ip,
+       xfs_fsblock_t           start_fsb,
+       xfs_off_t               count_fsb)
 {
-       struct xfs_mount *mp = ip->i_mount;
-       xfs_daddr_t     sector = xfs_fsb_to_db(ip, start_fsb);
-       sector_t        block = XFS_BB_TO_FSBT(mp, sector);
+       struct xfs_mount        *mp = ip->i_mount;
+       struct xfs_buftarg      *target = xfs_inode_buftarg(ip);
+       xfs_daddr_t             sector = xfs_fsb_to_db(ip, start_fsb);
+       sector_t                block = XFS_BB_TO_FSBT(mp, sector);
 
-       return blkdev_issue_zeroout(xfs_find_bdev_for_inode(VFS_I(ip)),
+       return blkdev_issue_zeroout(target->bt_bdev,
                block << (mp->m_super->s_blocksize_bits - 9),
                count_fsb << (mp->m_super->s_blocksize_bits - 9),
                GFP_NOFS, 0);
 
 
 STATIC int
 xfs_file_mmap(
-       struct file     *filp,
-       struct vm_area_struct *vma)
+       struct file             *file,
+       struct vm_area_struct   *vma)
 {
-       struct dax_device       *dax_dev;
+       struct inode            *inode = file_inode(file);
+       struct xfs_buftarg      *target = xfs_inode_buftarg(XFS_I(inode));
 
-       dax_dev = xfs_find_daxdev_for_inode(file_inode(filp));
        /*
         * We don't support synchronous mappings for non-DAX files and
         * for DAX files if underneath dax_device is not synchronous.
         */
-       if (!daxdev_mapping_supported(vma, dax_dev))
+       if (!daxdev_mapping_supported(vma, target->bt_daxdev))
                return -EOPNOTSUPP;
 
-       file_accessed(filp);
+       file_accessed(file);
        vma->vm_ops = &xfs_file_vm_ops;
-       if (IS_DAX(file_inode(filp)))
+       if (IS_DAX(inode))
                vma->vm_flags |= VM_HUGEPAGE;
        return 0;
 }
 
        return ip->i_cowfp && ip->i_cowfp->if_bytes;
 }
 
+/*
+ * Return the buftarg used for data allocations on a given inode.
+ */
+#define xfs_inode_buftarg(ip) \
+       (XFS_IS_REALTIME_INODE(ip) ? \
+               (ip)->i_mount->m_rtdev_targp : (ip)->i_mount->m_ddev_targp)
+
 /*
  * In-core inode flags.
  */
 
         * have to check the device for dax support or flush pagecache.
         */
        if (fa->fsx_xflags & FS_XFLAG_DAX) {
-               if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
-                       return -EINVAL;
-               if (!bdev_dax_supported(xfs_find_bdev_for_inode(VFS_I(ip)),
-                               sb->s_blocksize))
+               struct xfs_buftarg      *target = xfs_inode_buftarg(ip);
+
+               if (!bdev_dax_supported(target->bt_bdev, sb->s_blocksize))
                        return -EINVAL;
        }
 
 
        u16                     flags)
 {
        struct xfs_mount        *mp = ip->i_mount;
+       struct xfs_buftarg      *target = xfs_inode_buftarg(ip);
 
        if (unlikely(!xfs_valid_startblock(ip, imap->br_startblock)))
                return xfs_alert_fsblock_zero(ip, imap);
        }
        iomap->offset = XFS_FSB_TO_B(mp, imap->br_startoff);
        iomap->length = XFS_FSB_TO_B(mp, imap->br_blockcount);
-       iomap->bdev = xfs_find_bdev_for_inode(VFS_I(ip));
-       iomap->dax_dev = xfs_find_daxdev_for_inode(VFS_I(ip));
+       iomap->bdev = target->bt_bdev;
+       iomap->dax_dev = target->bt_daxdev;
        iomap->flags = flags;
 
        if (xfs_ipincount(ip) &&
        xfs_fileoff_t           offset_fsb,
        xfs_fileoff_t           end_fsb)
 {
+       struct xfs_buftarg      *target = xfs_inode_buftarg(ip);
+
        iomap->addr = IOMAP_NULL_ADDR;
        iomap->type = IOMAP_HOLE;
        iomap->offset = XFS_FSB_TO_B(ip->i_mount, offset_fsb);
        iomap->length = XFS_FSB_TO_B(ip->i_mount, end_fsb - offset_fsb);
-       iomap->bdev = xfs_find_bdev_for_inode(VFS_I(ip));
-       iomap->dax_dev = xfs_find_daxdev_for_inode(VFS_I(ip));
+       iomap->bdev = target->bt_bdev;
+       iomap->dax_dev = target->bt_daxdev;
 }
 
 static inline xfs_fileoff_t
 
                return false;
 
        /* Device has to support DAX too. */
-       return xfs_find_daxdev_for_inode(VFS_I(ip)) != NULL;
+       return xfs_inode_buftarg(ip)->bt_daxdev != NULL;
 }
 
 STATIC void