Message ID | 20240319011102.2929635-10-yi.zhang@huaweicloud.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | xfs/iomap: fix non-atomic clone operation and don't update size when zeroing range post eof | expand |
On Tue, Mar 19, 2024 at 09:11:02AM +0800, Zhang Yi wrote: > From: Zhang Yi <yi.zhang@huawei.com> > > Since iomap_write_end() can never return a partial write length, the > comperation between written, copied and bytes becomes useless, just comparison > merge them with the unwritten branch. > > Signed-off-by: Zhang Yi <yi.zhang@huawei.com> > Reviewed-by: Christoph Hellwig <hch@lst.de> With the spelling error fixed, Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > --- > fs/iomap/buffered-io.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index 004673ea8bc1..f2fb89056259 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -937,11 +937,6 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i) > > if (old_size < pos) > pagecache_isize_extended(iter->inode, old_size, pos); > - if (written < bytes) > - iomap_write_failed(iter->inode, pos + written, > - bytes - written); > - if (unlikely(copied != written)) > - iov_iter_revert(i, copied - written); > > cond_resched(); > if (unlikely(written == 0)) { > @@ -951,6 +946,9 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i) > * halfway through, might be a race with munmap, > * might be severe memory pressure. > */ > + iomap_write_failed(iter->inode, pos, bytes); > + iov_iter_revert(i, copied); > + > if (chunk > PAGE_SIZE) > chunk /= 2; > if (copied) { > -- > 2.39.2 > >
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index 004673ea8bc1..f2fb89056259 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -937,11 +937,6 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i) if (old_size < pos) pagecache_isize_extended(iter->inode, old_size, pos); - if (written < bytes) - iomap_write_failed(iter->inode, pos + written, - bytes - written); - if (unlikely(copied != written)) - iov_iter_revert(i, copied - written); cond_resched(); if (unlikely(written == 0)) { @@ -951,6 +946,9 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i) * halfway through, might be a race with munmap, * might be severe memory pressure. */ + iomap_write_failed(iter->inode, pos, bytes); + iov_iter_revert(i, copied); + if (chunk > PAGE_SIZE) chunk /= 2; if (copied) {