int filemap_write_and_wait_range(struct address_space *mapping,
                                 loff_t lstart, loff_t lend)
 {
-       int err = 0;
+       int err = 0, err2;
 
        if (mapping_needs_writeback(mapping)) {
                err = __filemap_fdatawrite_range(mapping, lstart, lend,
                 * But the -EIO is special case, it may indicate the worst
                 * thing (e.g. bug) happened, so we avoid waiting for it.
                 */
-               if (err != -EIO) {
-                       int err2 = filemap_fdatawait_range(mapping,
-                                               lstart, lend);
-                       if (!err)
-                               err = err2;
-               } else {
-                       /* Clear any previously stored errors */
-                       filemap_check_errors(mapping);
-               }
-       } else {
-               err = filemap_check_errors(mapping);
+               if (err != -EIO)
+                       __filemap_fdatawait_range(mapping, lstart, lend);
        }
+       err2 = filemap_check_errors(mapping);
+       if (!err)
+               err = err2;
        return err;
 }
 EXPORT_SYMBOL(filemap_write_and_wait_range);