diff options
author | Zhang Yi <yi.zhang@huawei.com> | 2024-03-20 19:05:44 +0800 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2024-04-25 14:23:53 +0200 |
commit | 89c6c1d91ab2dc05c6f4ad504b03169aa32694cc (patch) | |
tree | 45df566563d52faa2a5657f859fa8f03258711fe /fs/iomap | |
parent | 0fac04e4e0ea9ca51ac16d1a3d0e5dfe2919a6dd (diff) | |
download | linux-stable-89c6c1d91ab2dc05c6f4ad504b03169aa32694cc.tar.gz linux-stable-89c6c1d91ab2dc05c6f4ad504b03169aa32694cc.tar.bz2 linux-stable-89c6c1d91ab2dc05c6f4ad504b03169aa32694cc.zip |
iomap: drop the write failure handles when unsharing and zeroing
Unsharing and zeroing can only happen within EOF, so there is never a
need to perform posteof pagecache truncation if write begin fails, also
partial write could never theoretically happened from iomap_write_end(),
so remove both of them.
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://lore.kernel.org/r/20240320110548.2200662-6-yi.zhang@huaweicloud.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/iomap')
-rw-r--r-- | fs/iomap/buffered-io.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index e09441f4fceb..2bd9e780ff34 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -824,7 +824,6 @@ static int iomap_write_begin(struct iomap_iter *iter, loff_t pos, out_unlock: __iomap_put_folio(iter, pos, 0, folio); - iomap_write_failed(iter->inode, pos, len); return status; } @@ -901,8 +900,6 @@ static size_t iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len, if (old_size < pos) pagecache_isize_extended(iter->inode, old_size, pos); - if (ret < len) - iomap_write_failed(iter->inode, pos + ret, len - ret); return ret; } @@ -950,8 +947,10 @@ retry: } status = iomap_write_begin(iter, pos, bytes, &folio); - if (unlikely(status)) + if (unlikely(status)) { + iomap_write_failed(iter->inode, pos, bytes); break; + } if (iter->iomap.flags & IOMAP_F_STALE) break; @@ -965,6 +964,9 @@ retry: copied = copy_folio_from_iter_atomic(folio, offset, bytes, i); status = iomap_write_end(iter, pos, bytes, copied, folio); + if (status < bytes) + iomap_write_failed(iter->inode, pos + status, + bytes - status); if (unlikely(copied != status)) iov_iter_revert(i, copied - status); |