diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index 87a7ff00ef622b3c455be28517d89c9aec1895fd..712f00995390ee021249bb6f8478db30f0f8f3bb 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -164,6 +164,9 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
 			ret = err;
 	}
 out:
+	err = file_check_and_advance_wb_err(file);
+	if (ret == 0)
+		ret = err;
 	trace_ext4_sync_file_exit(inode, ret);
 	return ret;
 }