[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 3 Mar 2021 09:57:48 +0000
From: "ruansy.fnst@...itsu.com" <ruansy.fnst@...itsu.com>
To: Christoph Hellwig <hch@....de>
CC: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"linux-xfs@...r.kernel.org" <linux-xfs@...r.kernel.org>,
"linux-nvdimm@...ts.01.org" <linux-nvdimm@...ts.01.org>,
"linux-fsdevel@...r.kernel.org" <linux-fsdevel@...r.kernel.org>,
"darrick.wong@...cle.com" <darrick.wong@...cle.com>,
"dan.j.williams@...el.com" <dan.j.williams@...el.com>,
"willy@...radead.org" <willy@...radead.org>,
"jack@...e.cz" <jack@...e.cz>,
"viro@...iv.linux.org.uk" <viro@...iv.linux.org.uk>,
"linux-btrfs@...r.kernel.org" <linux-btrfs@...r.kernel.org>,
"ocfs2-devel@....oracle.com" <ocfs2-devel@....oracle.com>,
"david@...morbit.com" <david@...morbit.com>,
"rgoldwyn@...e.de" <rgoldwyn@...e.de>
Subject: Re: [PATCH v2 09/10] fs/xfs: Handle CoW for fsdax write() path
>
> On Fri, Feb 26, 2021 at 08:20:29AM +0800, Shiyang Ruan wrote:
> > error = iomap_zero_range(VFS_I(ip), offset, len, NULL,
> > - &xfs_buffered_write_iomap_ops);
> > + IS_DAX(VFS_I(ip)) ?
> > + &xfs_dax_write_iomap_ops : &xfs_buffered_write_iomap_ops);
>
> Please add a xfs_zero_range helper that picks the right iomap_ops
> instead of open coding this in a few places.
OK. I'll add it.
>
> > +static int
> > +xfs_dax_write_iomap_end(
> > + struct inode *inode,
> > + loff_t pos,
> > + loff_t length,
> > + ssize_t written,
> > + unsigned int flags,
> > + struct iomap *iomap)
> > +{
> > + int error = 0;
> > + xfs_inode_t *ip = XFS_I(inode);
> > +
> > + if (pos + written > i_size_read(inode)) {
> > + i_size_write(inode, pos + written);
> > + error = xfs_setfilesize(ip, pos, written);
> > + }
> > + if (xfs_is_cow_inode(ip))
> > + error = xfs_reflink_end_cow(ip, pos, written);
> > +
> > + return error;
>
> What is the advantage of the ioemap_end handler here? It adds another
> indirect funtion call to the fast path, so if we can avoid it, I'd
> rather do that.
These code were in xfs_file_dax_write(). I moved them into the iomap_end
because the mmaped CoW need this.
I know this is not so good, but I could not find another better way. Do you
have any ideas?
>
> Also, shouldn't we cancel the COW rather than finishing it when setting
> the file size fails?
>
I did forget about this part. Thanks for pointing out.
--
Thanks,
Ruan Shiyang.
Powered by blists - more mailing lists