lkml.org 
[lkml]   [2021]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH v2 09/10] fs/xfs: Handle CoW for fsdax write() path
Date
> 
> 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.
\
 
 \ /
  Last update: 2021-03-03 16:54    [W:0.116 / U:1.344 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site