[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210916062357.GD13306@lst.de>
Date: Thu, 16 Sep 2021 08:23:57 +0200
From: Christoph Hellwig <hch@....de>
To: Shiyang Ruan <ruansy.fnst@...itsu.com>
Cc: djwong@...nel.org, hch@....de, linux-xfs@...r.kernel.org,
dan.j.williams@...el.com, david@...morbit.com,
linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
nvdimm@...ts.linux.dev, rgoldwyn@...e.de, viro@...iv.linux.org.uk,
willy@...radead.org
Subject: Re: [PATCH v9 7/8] xfs: support CoW in fsdax mode
On Wed, Sep 15, 2021 at 06:45:00PM +0800, Shiyang Ruan wrote:
> +static int
> +xfs_dax_write_iomap_end(
> + struct inode *inode,
> + loff_t pos,
> + loff_t length,
> + ssize_t written,
> + unsigned flags,
> + struct iomap *iomap)
> +{
> + struct xfs_inode *ip = XFS_I(inode);
> + /*
> + * Usually we use @written to indicate whether the operation was
> + * successful. But it is always positive or zero. The CoW needs the
> + * actual error code from actor(). So, get it from
> + * iomap_iter->processed.
> + */
> + const struct iomap_iter *iter =
> + container_of(iomap, typeof(*iter), iomap);
> +
> + if (!xfs_is_cow_inode(ip))
> + return 0;
> +
> + if (iter->processed <= 0) {
> + xfs_reflink_cancel_cow_range(ip, pos, length, true);
> + return 0;
> + }
> +
> + return xfs_reflink_end_cow(ip, pos, iter->processed);
Didn't we come to the conflusion last time that we don't actually
need to poke into the iomap_iter here as the written argument is equal
to iter->processed if it is > 0:
if (iter->iomap.length && ops->iomap_end) {
ret = ops->iomap_end(iter->inode, iter->pos, iomap_length(iter),
iter->processed > 0 ? iter->processed : 0,
iter->flags, &iter->iomap);
..
So should be able to just do:
static int
xfs_dax_write_iomap_end(
struct inode *inode,
loff_t pos,
loff_t length,
ssize_t written,
unsigned flags,
struct iomap *iomap)
{
struct xfs_inode *ip = XFS_I(inode);
if (!xfs_is_cow_inode(ip))
return 0;
if (!written) {
xfs_reflink_cancel_cow_range(ip, pos, length, true);
return 0;
}
return xfs_reflink_end_cow(ip, pos, written);
}
Powered by blists - more mailing lists