* Clean up the inode after DIO or DAX extending write has completed and the
  * inode size has been updated using ext4_handle_inode_extension().
  */
-static void ext4_inode_extension_cleanup(struct inode *inode, ssize_t count)
+static void ext4_inode_extension_cleanup(struct inode *inode, bool need_trunc)
 {
        lockdep_assert_held_write(&inode->i_rwsem);
-       if (count < 0) {
+       if (need_trunc) {
                ext4_truncate_failed_write(inode);
                /*
                 * If the truncate operation failed early, then the inode may
                 * writeback of delalloc blocks.
                 */
                WARN_ON_ONCE(ret == -EIOCBQUEUED);
-               ext4_inode_extension_cleanup(inode, ret);
+               ext4_inode_extension_cleanup(inode, ret < 0);
        }
 
 out:
 
        if (extend) {
                ret = ext4_handle_inode_extension(inode, offset, ret);
-               ext4_inode_extension_cleanup(inode, ret);
+               ext4_inode_extension_cleanup(inode, ret < (ssize_t)count);
        }
 out:
        inode_unlock(inode);