]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
iomap: drop the write failure handles when unsharing and zeroing
authorZhang Yi <yi.zhang@huawei.com>
Wed, 20 Mar 2024 11:05:44 +0000 (19:05 +0800)
committerChristian Brauner <brauner@kernel.org>
Thu, 25 Apr 2024 12:23:53 +0000 (14:23 +0200)
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>
fs/iomap/buffered-io.c

index e09441f4fceb6f43308bebe03cce7c31c30f8295..2bd9e780ff34dac7a41e45a45fa52b5b350065f4 100644 (file)
@@ -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);