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)) {
                         * 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) {