[PATCH 7/8] xfs: add DAX IO path support
Dave Chinner
david at fromorbit.com
Thu Apr 16 03:54:02 CDT 2015
On Mon, Apr 06, 2015 at 01:49:14PM -0400, Brian Foster wrote:
> On Tue, Mar 24, 2015 at 09:51:05PM +1100, Dave Chinner wrote:
> > From: Dave Chinner <dchinner at redhat.com>
> >
> > DAX does not do buffered IO (can't buffer direct access!) and hence
> > all read/write IO is vectored through the direct IO path. Hence we
> > need to add the DAX IO path callouts to the direct IO
> > infrastructure.
> >
> > Signed-off-by: Dave Chinner <dchinner at redhat.com>
> > ---
> > fs/xfs/xfs_aops.c | 35 +++++++++++++++++++++++++++--------
> > 1 file changed, 27 insertions(+), 8 deletions(-)
> >
> > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
> > index 3fc5052..97979e9 100644
> > --- a/fs/xfs/xfs_aops.c
> > +++ b/fs/xfs/xfs_aops.c
> > @@ -1559,6 +1559,30 @@ xfs_end_io_direct_write(
> > }
> > }
> >
> > +static inline ssize_t
> > +xfs_vm_do_dio(
> > + struct inode *inode,
> > + int rw,
> > + struct kiocb *iocb,
> > + struct iov_iter *iter,
> > + loff_t offset,
> > + void (*endio)(struct kiocb *iocb,
> > + loff_t offset,
> > + ssize_t size,
> > + void *private),
> > + int flags)
> > +{
> > + struct block_device *bdev;
> > +
> > + if (IS_DAX(inode))
> > + return dax_do_io(rw, iocb, inode, iter, offset,
> > + xfs_get_blocks_direct, endio, 0);
> > +
>
> I assume this is supposed to be get_blocks_direct and not
> get_blocks_dax, based on the I/O codepath. The naming is starting to get
> a little confusing though. xfs_get_blocks_dax() implies to me that it's
> for any DAX I/O, but we only appear to use it internally for
> truncate/zeroing/mmap and such. Alas, I can't think of a better name atm
> and the code seems Ok to me:
xfs_get_blocks_dax is now gone as there is no difference between
the block mapping of DAX and direct IO....
Cheers,
Dave.
--
Dave Chinner
david at fromorbit.com
More information about the xfs
mailing list