From 3455b0a5d57b8139b82b3e0f1cf4f7893173995d Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 23 Nov 2006 16:41:11 +0000
Subject: [PATCH] Update fsync test to match new O_DIRECT behavior.

Greg Smith
---
 src/tools/fsync/test_fsync.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/tools/fsync/test_fsync.c b/src/tools/fsync/test_fsync.c
index 32d3aff003b..c313021155e 100644
--- a/src/tools/fsync/test_fsync.c
+++ b/src/tools/fsync/test_fsync.c
@@ -14,6 +14,7 @@
 #include <time.h>
 #include <sys/time.h>
 #include <unistd.h>
+#include <string.h>
 
 #ifdef WIN32
 #define FSYNC_FILENAME	"./test_fsync.out"
@@ -21,21 +22,34 @@
 #define FSYNC_FILENAME	"/var/tmp/test_fsync.out"
 #endif
 
-/* O_SYNC and O_FSYNC are the same */
+/* This logic comes from src/backend/access/transam/xlog.c where it's
+   better documented */
+#ifdef O_DIRECT
+#define PG_O_DIRECT                             O_DIRECT
+#else
+#define PG_O_DIRECT                             0
+#endif
+
 #if defined(O_SYNC)
-#define OPEN_SYNC_FLAG		O_SYNC
+#define BARE_OPEN_SYNC_FLAG             O_SYNC
 #elif defined(O_FSYNC)
-#define OPEN_SYNC_FLAG		O_FSYNC
-#elif defined(O_DSYNC)
-#define OPEN_DATASYNC_FLAG	O_DSYNC
+#define BARE_OPEN_SYNC_FLAG             O_FSYNC
+#endif
+#ifdef BARE_OPEN_SYNC_FLAG
+#define OPEN_SYNC_FLAG                  (BARE_OPEN_SYNC_FLAG | PG_O_DIRECT)
 #endif
 
+#if defined(O_DSYNC)
 #if defined(OPEN_SYNC_FLAG)
-#if defined(O_DSYNC) && (O_DSYNC != OPEN_SYNC_FLAG)
-#define OPEN_DATASYNC_FLAG	O_DSYNC
+#if O_DSYNC != BARE_OPEN_SYNC_FLAG
+#define OPEN_DATASYNC_FLAG              (O_DSYNC | PG_O_DIRECT)
+#endif
+#else
+#define OPEN_DATASYNC_FLAG              (O_DSYNC | PG_O_DIRECT)
 #endif
 #endif
 
+
 #define WAL_FILE_SIZE	(16 * 1024 * 1024)
 
 void		die(char *str);
-- 
GitLab