diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 9854b51c6a..1da3b8eb2e 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -171,10 +171,10 @@ const struct config_enum_entry sync_method_options[] = { #ifdef HAVE_FDATASYNC {"fdatasync", SYNC_METHOD_FDATASYNC, false}, #endif -#ifdef OPEN_SYNC_FLAG +#ifdef O_SYNC {"open_sync", SYNC_METHOD_OPEN, false}, #endif -#ifdef OPEN_DATASYNC_FLAG +#ifdef O_DSYNC {"open_datasync", SYNC_METHOD_OPEN_DSYNC, false}, #endif {NULL, 0, false} @@ -7894,10 +7894,10 @@ get_sync_bit(int method) /* * Optimize writes by bypassing kernel cache with O_DIRECT when using - * O_SYNC/O_FSYNC and O_DSYNC. But only if archiving and streaming are - * disabled, otherwise the archive command or walsender process will read - * the WAL soon after writing it, which is guaranteed to cause a physical - * read if we bypassed the kernel cache. We also skip the + * O_SYNC and O_DSYNC. But only if archiving and streaming are disabled, + * otherwise the archive command or walsender process will read the WAL + * soon after writing it, which is guaranteed to cause a physical read if + * we bypassed the kernel cache. We also skip the * posix_fadvise(POSIX_FADV_DONTNEED) call in XLogFileClose() for the same * reason. * @@ -7921,13 +7921,13 @@ get_sync_bit(int method) case SYNC_METHOD_FSYNC_WRITETHROUGH: case SYNC_METHOD_FDATASYNC: return 0; -#ifdef OPEN_SYNC_FLAG +#ifdef O_SYNC case SYNC_METHOD_OPEN: - return OPEN_SYNC_FLAG | o_direct_flag; + return O_SYNC | o_direct_flag; #endif -#ifdef OPEN_DATASYNC_FLAG +#ifdef O_DSYNC case SYNC_METHOD_OPEN_DSYNC: - return OPEN_DATASYNC_FLAG | o_direct_flag; + return O_DSYNC | o_direct_flag; #endif default: /* can't happen (unless we are out of sync with option array) */ diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c index f7bc199a30..6739214eb8 100644 --- a/src/bin/pg_test_fsync/pg_test_fsync.c +++ b/src/bin/pg_test_fsync/pg_test_fsync.c @@ -300,7 +300,7 @@ test_sync(int writes_per_op) printf(LABEL_FORMAT, "open_datasync"); fflush(stdout); -#ifdef OPEN_DATASYNC_FLAG +#ifdef O_DSYNC if ((tmpfile = open_direct(filename, O_RDWR | O_DSYNC | PG_BINARY, 0)) == -1) { printf(NA_FORMAT, _("n/a*")); @@ -407,8 +407,8 @@ test_sync(int writes_per_op) printf(LABEL_FORMAT, "open_sync"); fflush(stdout); -#ifdef OPEN_SYNC_FLAG - if ((tmpfile = open_direct(filename, O_RDWR | OPEN_SYNC_FLAG | PG_BINARY, 0)) == -1) +#ifdef O_SYNC + if ((tmpfile = open_direct(filename, O_RDWR | O_SYNC | PG_BINARY, 0)) == -1) { printf(NA_FORMAT, _("n/a*")); fs_warning = true; @@ -466,7 +466,7 @@ test_open_syncs(void) static void test_open_sync(const char *msg, int writes_size) { -#ifdef OPEN_SYNC_FLAG +#ifdef O_SYNC int tmpfile, ops, writes; @@ -475,8 +475,8 @@ test_open_sync(const char *msg, int writes_size) printf(LABEL_FORMAT, msg); fflush(stdout); -#ifdef OPEN_SYNC_FLAG - if ((tmpfile = open_direct(filename, O_RDWR | OPEN_SYNC_FLAG | PG_BINARY, 0)) == -1) +#ifdef O_SYNC + if ((tmpfile = open_direct(filename, O_RDWR | O_SYNC | PG_BINARY, 0)) == -1) printf(NA_FORMAT, _("n/a*")); else { diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h index a47e3eeb1f..810cd1fd86 100644 --- a/src/include/access/xlogdefs.h +++ b/src/include/access/xlogdefs.h @@ -69,28 +69,12 @@ typedef uint16 RepOriginId; * are available on the current platform, and to choose an appropriate * default method. We assume that fsync() is always available, and that * configure determined whether fdatasync() is. + * + * Note that we define our own O_DSYNC on Windows, but not O_SYNC. */ -#if defined(O_SYNC) -#define OPEN_SYNC_FLAG O_SYNC -#elif defined(O_FSYNC) -#define OPEN_SYNC_FLAG O_FSYNC -#endif - -#if defined(O_DSYNC) -#if defined(OPEN_SYNC_FLAG) -/* O_DSYNC is distinct? */ -#if O_DSYNC != OPEN_SYNC_FLAG -#define OPEN_DATASYNC_FLAG O_DSYNC -#endif -#else /* !defined(OPEN_SYNC_FLAG) */ -/* Win32 only has O_DSYNC */ -#define OPEN_DATASYNC_FLAG O_DSYNC -#endif -#endif - #if defined(PLATFORM_DEFAULT_SYNC_METHOD) #define DEFAULT_SYNC_METHOD PLATFORM_DEFAULT_SYNC_METHOD -#elif defined(OPEN_DATASYNC_FLAG) +#elif defined(O_DSYNC) && (!defined(O_SYNC) || O_DSYNC != O_SYNC) #define DEFAULT_SYNC_METHOD SYNC_METHOD_OPEN_DSYNC #elif defined(HAVE_FDATASYNC) #define DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC