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@xxxxxxxxxx> > > > > 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@xxxxxxxxxx> > > --- > > 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@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs