From: Dave Chinner <david@fromorbit.com>
To: Brian Foster <bfoster@redhat.com>
Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org,
willy@linux.intel.com, jack@suse.cz
Subject: Re: [PATCH 5/8] xfs: add DAX file operations support
Date: Thu, 16 Apr 2015 18:29:09 +1000 [thread overview]
Message-ID: <20150416082909.GA21261@dastard> (raw)
In-Reply-To: <20150406174900.GC58965@bfoster.bfoster>
On Mon, Apr 06, 2015 at 01:49:00PM -0400, Brian Foster wrote:
> On Tue, Mar 24, 2015 at 09:51:03PM +1100, Dave Chinner wrote:
> > From: Dave Chinner <dchinner@redhat.com>
> >
> > Add the initial support for DAX file operations to XFS. This
> > includes the necessary block allocation and mmap page fault hooks
> > for DAX to function.
> >
> > Note: we specifically have to disable splice_read/write from
> > occurring because they are dependent on usingthe page cache for
> > correct operation. We have no page cache for DAX, so we need to
> > disable them completely on DAX inodes.
> >
>
> Looks like Boaz already pointed out this required an update wrt to
> splice...
>
> > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > ---
> > fs/xfs/xfs_aops.c | 73 ++++++++++++++++++++++++++++++++--
> > fs/xfs/xfs_aops.h | 7 +++-
> > fs/xfs/xfs_file.c | 116 ++++++++++++++++++++++++++++++++----------------------
> > 3 files changed, 143 insertions(+), 53 deletions(-)
> >
> > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
> > index 3a9b7a1..3fc5052 100644
> > --- a/fs/xfs/xfs_aops.c
> > +++ b/fs/xfs/xfs_aops.c
> > @@ -1233,13 +1233,64 @@ xfs_vm_releasepage(
> > return try_to_free_buffers(page);
> > }
> >
> > +/*
> > + * For DAX we need a mapping buffer callback for unwritten extent conversion
> > + * when page faults allocation blocks and then zero them.
>
> s/allocation/allocate/
>
> > + */
> > +#ifdef CONFIG_FS_DAX
> > +static struct xfs_ioend *
> > +xfs_dax_alloc_ioend(
> > + struct inode *inode,
> > + xfs_off_t offset,
> > + ssize_t size)
> > +{
> > + struct xfs_ioend *ioend;
> > +
> > + ASSERT(IS_DAX(inode));
> > + ioend = xfs_alloc_ioend(inode, XFS_IO_UNWRITTEN);
> > + ioend->io_offset = offset;
> > + ioend->io_size = size;
> > + return ioend;
> > +}
> > +
> > +void
> > +xfs_get_blocks_dax_complete(
> > + struct buffer_head *bh,
> > + int uptodate)
> > +{
> > + struct xfs_ioend *ioend = bh->b_private;
> > + struct xfs_inode *ip = XFS_I(ioend->io_inode);
> > + int error;
> > +
> > + ASSERT(IS_DAX(ioend->io_inode));
> > +
> > + /* if there was an error zeroing, then don't convert it */
> > + if (!uptodate)
> > + goto out_free;
> > +
>
> Hmm, the error handling seems a bit off here. I'm new to the mmap paths
> so I could easily be missing something. Anyways, this uptodate val is
> hardcoded to 1 down in __dax_mkwrite(). This function is only called on
> !error, however, which seems to make this error handling superfluous. If
> I am following that correctly, who is going to free the ioend if an
> error does occur?
Right, the dax code needs fixing to unconditionally call the end IO
callback. I'll add that patch into the start of the series.
As it is, this patch needs significant rework after the DIO
write completion path rework. It greatly simplifies this because we
now have an ioend being allocated in __xfs_get_blocks....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2015-04-16 8:29 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-24 10:50 [PATCH 0/8 v2] xfs: DAX support Dave Chinner
2015-03-24 10:50 ` [PATCH 1/8] xfs: mmap lock needs to be inside freeze protection Dave Chinner
2015-04-01 14:34 ` Jan Kara
2015-04-06 17:48 ` Brian Foster
2015-03-24 10:51 ` [PATCH 2/8] dax: don't abuse get_block mapping for endio callbacks Dave Chinner
2015-04-01 14:53 ` Jan Kara
2015-03-24 10:51 ` [PATCH 3/8] dax: expose __dax_fault for filesystems with locking constraints Dave Chinner
2015-04-01 15:07 ` Jan Kara
2015-03-24 10:51 ` [PATCH 4/8] xfs: add DAX block zeroing support Dave Chinner
2015-04-06 17:48 ` Brian Foster
2015-03-24 10:51 ` [PATCH 5/8] xfs: add DAX file operations support Dave Chinner
2015-03-24 12:08 ` Boaz Harrosh
2015-03-24 12:24 ` Boaz Harrosh
2015-03-24 21:17 ` Dave Chinner
2015-03-25 8:47 ` Boaz Harrosh
2015-04-06 17:49 ` Brian Foster
2015-04-16 8:29 ` Dave Chinner [this message]
2015-04-16 9:33 ` Boaz Harrosh
2015-04-16 11:47 ` Dave Chinner
2015-03-24 10:51 ` [PATCH 6/8] xfs: add DAX truncate support Dave Chinner
2015-04-06 17:49 ` Brian Foster
2015-03-24 10:51 ` [PATCH 7/8] xfs: add DAX IO path support Dave Chinner
2015-04-06 17:49 ` Brian Foster
2015-04-16 8:54 ` Dave Chinner
2015-03-24 10:51 ` [PATCH 8/8] xfs: add initial DAX support Dave Chinner
2015-03-24 12:52 ` Boaz Harrosh
2015-03-24 21:25 ` Dave Chinner
2015-03-25 9:14 ` Boaz Harrosh
2015-04-06 19:00 ` Brian Foster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150416082909.GA21261@dastard \
--to=david@fromorbit.com \
--cc=bfoster@redhat.com \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=willy@linux.intel.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).