Be more careful about catching fsync() errors

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/filesetup.c b/filesetup.c
index 08c365d..f8e4d77 100644
--- a/filesetup.c
+++ b/filesetup.c
@@ -96,8 +96,12 @@
 
 	if (td->terminate)
 		unlink(f->file_name);
-	else if (td->o.create_fsync)
-		fsync(f->fd);
+	else if (td->o.create_fsync) {
+		if (fsync(f->fd) < 0) {
+			td_verror(td, errno, "fsync");
+			goto err;
+		}
+	}
 
 	free(b);
 done:
@@ -687,7 +691,7 @@
 
 int put_file(struct thread_data *td, struct fio_file *f)
 {
-	int ret = 0;
+	int f_ret = 0, ret = 0;
 
 	dprint(FD_FILE, "put file %s, ref=%d\n", f->file_name, f->references);
 
@@ -699,11 +703,14 @@
 		return 0;
 
 	if (should_fsync(td) && td->o.fsync_on_close)
-		fsync(f->fd);
+		f_ret = fsync(f->fd);
 
 	if (td->io_ops->close_file)
 		ret = td->io_ops->close_file(td, f);
 
+	if (!ret)
+		ret = !f_ret;
+
 	td->nr_open_files--;
 	f->flags &= ~FIO_FILE_OPEN;
 	return ret;