iomap: do some small logical cleanup in buffered write
authorZhang Yi <yi.zhang@huawei.com>
Wed, 20 Mar 2024 11:05:48 +0000 (19:05 +0800)
committerChristian Brauner <brauner@kernel.org>
Thu, 25 Apr 2024 12:23:54 +0000 (14:23 +0200)
Since iomap_write_end() can never return a partial write length, the
comparison between written, copied and bytes becomes useless, just
merge them with the unwritten branch.

Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://lore.kernel.org/r/20240320110548.2200662-10-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 73241fbaff6bc0a4bce6a62f91ff4abda827c09e..41c8f0c68ef564960a4341f605d9da135e9f14ef 100644 (file)
@@ -975,11 +975,6 @@ retry:
 
                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)) {
@@ -989,6 +984,9 @@ retry:
                         * 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) {