blkdev_issue_flush() can fail. Make sure the error gets properly propagated.
Signed-off-by: Jan Kara <jack@suse.cz>
         * disk caches manually so that data really is on persistent
         * storage
         */
-       if (needs_barrier)
-               blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+       if (needs_barrier) {
+               int err;
+
+               err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+               if (!ret)
+                       ret = err;
+       }
 out:
        trace_ext3_sync_file_exit(inode, ret);
        return ret;