struct inode *inode = file->f_mapping->host;
        struct ext4_inode_info *ei = EXT4_I(inode);
        journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
-       int ret;
+       int ret, err;
        tid_t commit_tid;
        bool needs_barrier = false;
 
                needs_barrier = true;
        jbd2_log_start_commit(journal, commit_tid);
        ret = jbd2_log_wait_commit(journal, commit_tid);
-       if (needs_barrier)
-               blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+       if (needs_barrier) {
+               err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+               if (!ret)
+                       ret = err;
+       }
  out:
        mutex_unlock(&inode->i_mutex);
        trace_ext4_sync_file_exit(inode, ret);