Remove configure probe for fdatasync.
authorThomas Munro <tmunro@postgresql.org>
Fri, 5 Aug 2022 04:10:05 +0000 (16:10 +1200)
committerThomas Munro <tmunro@postgresql.org>
Fri, 5 Aug 2022 04:37:38 +0000 (16:37 +1200)
fdatasync() is in SUSv2, and all targeted Unix systems have it.  We have
a replacement function for Windows.

We retain the probe for the function declaration, which allows us to
supply the mysteriously missing declaration for macOS, and also for
Windows.  No need to keep a HAVE_FDATASYNC macro around.

Also rename src/port/fdatasync.c to win32fdatasync.c since it's only for
Windows.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com
Discussion: https://postgr.es/m/CA%2BhUKGJZJVO%3DiX%2Beb-PXi2_XS9ZRqnn_4URh0NUQOwt6-_51xQ%40mail.gmail.com

12 files changed:
configure
configure.ac
src/backend/access/transam/xlog.c
src/backend/storage/file/fd.c
src/bin/pg_test_fsync/pg_test_fsync.c
src/include/access/xlogdefs.h
src/include/pg_config.h.in
src/include/port/freebsd.h
src/include/port/win32_port.h
src/port/win32fdatasync.c [moved from src/port/fdatasync.c with 88% similarity]
src/tools/msvc/Mkvcbuild.pm
src/tools/msvc/Solution.pm

index 21f4520f8107b3ca8fa48db440f59b71e4bb8f59..da28a6bb8b094e0cc7188d42c7c261fa45534188 100755 (executable)
--- a/configure
+++ b/configure
@@ -16039,7 +16039,7 @@ fi
 LIBS_including_readline="$LIBS"
 LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
 
-for ac_func in backtrace_symbols copyfile fdatasync getifaddrs getpeerucred inet_pton kqueue mbstowcs_l memset_s posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strchrnul strsignal syncfs sync_file_range uselocale wcstombs_l
+for ac_func in backtrace_symbols copyfile getifaddrs getpeerucred inet_pton kqueue mbstowcs_l memset_s posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strchrnul strsignal syncfs sync_file_range uselocale wcstombs_l
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
  ;;
 esac
 
-  case " $LIBOBJS " in
-  *" fdatasync.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS fdatasync.$ac_objext"
- ;;
-esac
-
   case " $LIBOBJS " in
   *" getrusage.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS getrusage.$ac_objext"
@@ -16977,6 +16971,12 @@ esac
  ;;
 esac
 
+  case " $LIBOBJS " in
+  *" win32fdatasync.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS win32fdatasync.$ac_objext"
+ ;;
+esac
+
   case " $LIBOBJS " in
   *" win32link.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS win32link.$ac_objext"
index a7ab66017909168e0d3b01fa867fd505f3cfcf86..fada092cf386be8f06130257f9818a2c78c65c17 100644 (file)
@@ -1792,7 +1792,6 @@ LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
 AC_CHECK_FUNCS(m4_normalize([
        backtrace_symbols
        copyfile
-       fdatasync
        getifaddrs
        getpeerucred
        inet_pton
@@ -1928,7 +1927,6 @@ if test "$PORTNAME" = "win32"; then
   AC_CHECK_FUNCS(_configthreadlocale)
   AC_REPLACE_FUNCS(gettimeofday)
   AC_LIBOBJ(dirmod)
-  AC_LIBOBJ(fdatasync)
   AC_LIBOBJ(getrusage)
   AC_LIBOBJ(kill)
   AC_LIBOBJ(open)
@@ -1936,6 +1934,7 @@ if test "$PORTNAME" = "win32"; then
   AC_LIBOBJ(win32dlopen)
   AC_LIBOBJ(win32env)
   AC_LIBOBJ(win32error)
+  AC_LIBOBJ(win32fdatasync)
   AC_LIBOBJ(win32link)
   AC_LIBOBJ(win32ntdll)
   AC_LIBOBJ(win32pread)
index eb5115fd5a828ea892fc6f5a62832edfc6ce0bb9..34f0150d1ee965bb9f6238617f6a759487421b70 100644 (file)
@@ -168,9 +168,7 @@ const struct config_enum_entry sync_method_options[] = {
 #ifdef HAVE_FSYNC_WRITETHROUGH
        {"fsync_writethrough", SYNC_METHOD_FSYNC_WRITETHROUGH, false},
 #endif
-#ifdef HAVE_FDATASYNC
        {"fdatasync", SYNC_METHOD_FDATASYNC, false},
-#endif
 #ifdef O_SYNC
        {"open_sync", SYNC_METHOD_OPEN, false},
 #endif
@@ -8015,12 +8013,10 @@ issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli)
                                msg = _("could not fsync write-through file \"%s\": %m");
                        break;
 #endif
-#ifdef HAVE_FDATASYNC
                case SYNC_METHOD_FDATASYNC:
                        if (pg_fdatasync(fd) != 0)
                                msg = _("could not fdatasync file \"%s\": %m");
                        break;
-#endif
                case SYNC_METHOD_OPEN:
                case SYNC_METHOD_OPEN_DSYNC:
                        /* not reachable */
index 5a2eb01238174931e329aa4b44352ccdc7659a95..ccb540d6178b798da563ddc16552dbada1e8bfaa 100644 (file)
@@ -442,20 +442,12 @@ pg_fsync_writethrough(int fd)
 
 /*
  * pg_fdatasync --- same as fdatasync except does nothing if enableFsync is off
- *
- * Not all platforms have fdatasync; treat as fsync if not available.
  */
 int
 pg_fdatasync(int fd)
 {
        if (enableFsync)
-       {
-#ifdef HAVE_FDATASYNC
                return fdatasync(fd);
-#else
-               return fsync(fd);
-#endif
-       }
        else
                return 0;
 }
index 8f0ef8e66b9e6cc64b5862456307f0d47a566f82..77f0db0376bb24cb2b9688a59bfe5e37ce846f40 100644 (file)
@@ -331,7 +331,6 @@ test_sync(int writes_per_op)
        printf(LABEL_FORMAT, "fdatasync");
        fflush(stdout);
 
-#ifdef HAVE_FDATASYNC
        if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
                die("could not open output file");
        START_TIMER;
@@ -347,9 +346,6 @@ test_sync(int writes_per_op)
        }
        STOP_TIMER;
        close(tmpfile);
-#else
-       printf(NA_FORMAT, _("n/a"));
-#endif
 
 /*
  * Test fsync
index 810cd1fd86aa2efa57b5e68dff7f596b2a100f0a..49e581925c91da6362fb0bd14f1c53c6b592662a 100644 (file)
@@ -67,8 +67,7 @@ typedef uint16 RepOriginId;
 /*
  * This chunk of hackery attempts to determine which file sync methods
  * 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.
+ * default method.
  *
  * Note that we define our own O_DSYNC on Windows, but not O_SYNC.
  */
@@ -76,10 +75,8 @@ typedef uint16 RepOriginId;
 #define DEFAULT_SYNC_METHOD            PLATFORM_DEFAULT_SYNC_METHOD
 #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
 #else
-#define DEFAULT_SYNC_METHOD            SYNC_METHOD_FSYNC
+#define DEFAULT_SYNC_METHOD            SYNC_METHOD_FDATASYNC
 #endif
 
 #endif                                                 /* XLOG_DEFS_H */
index 6505a842118f13c89f5f4b178889a38f4bf303a3..2a0d08d10f565955e17b55136b17c98317b1c71c 100644 (file)
 /* Define to 1 if you have the `explicit_bzero' function. */
 #undef HAVE_EXPLICIT_BZERO
 
-/* Define to 1 if you have the `fdatasync' function. */
-#undef HAVE_FDATASYNC
-
 /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
 #undef HAVE_FSEEKO
 
index 2e2e749a6b65b9305fb480669299b6f75c28505d..0e3fde55d6d9ad99a4a473eabcc79067fafd2fc5 100644 (file)
@@ -5,6 +5,4 @@
  * would prefer open_datasync on FreeBSD 13+, but that is not a good choice on
  * many systems.
  */
-#ifdef HAVE_FDATASYNC
 #define PLATFORM_DEFAULT_SYNC_METHOD   SYNC_METHOD_FDATASYNC
-#endif
index 336e11b3ba4e5b36bf47e826d0ba676e20b33fd1..0eaa97561a0ef41d1629853d9f18e01aac195058 100644 (file)
 #define HAVE_FSYNC_WRITETHROUGH
 #define FSYNC_WRITETHROUGH_IS_FSYNC
 
-/*
- * We have a replacement for fdatasync() in src/port/fdatasync.c, which is
- * unconditionally used by MSVC and Mingw builds.
- */
-#ifndef HAVE_FDATASYNC
-#define HAVE_FDATASYNC
-#endif
-
 #define USES_WINSOCK
 
 /*
similarity index 88%
rename from src/port/fdatasync.c
rename to src/port/win32fdatasync.c
index afef853aa3cf753cc9c3d21957cce869f41c9076..31d631c6962c5bff7d484dd430fe58fdf85178e7 100644 (file)
@@ -1,12 +1,12 @@
 /*-------------------------------------------------------------------------
  *
- * fdatasync.c
+ * win32fdatasync.c
  *        Win32 fdatasync() replacement
  *
  *
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
  *
- * src/port/fdatasync.c
+ * src/port/win32fdatasync.c
  *
  *-------------------------------------------------------------------------
  */
index a06dbcae4d292d484b06558a43ca8982381ca203..8d88e78f05141e198b09a23cbfedba302fe71d5c 100644 (file)
@@ -99,7 +99,7 @@ sub mkvcbuild
        $solution = CreateSolution($vsVersion, $config);
 
        our @pgportfiles = qw(
-         chklocale.c explicit_bzero.c fdatasync.c
+         chklocale.c explicit_bzero.c
          getpeereid.c getrusage.c inet_aton.c
          getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c
          snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c
@@ -110,6 +110,7 @@ sub mkvcbuild
          strerror.c tar.c
          win32dlopen.c
          win32env.c win32error.c
+         win32fdatasync.c
          win32link.c
          win32pread.c
          win32pwrite.c
index bd8b755b9647997545c01749f1e3d5fbd01b37e1..d7ab6ab2587aa47346249d538ffd915b91da7b09 100644 (file)
@@ -252,7 +252,6 @@ sub GenerateFiles
                HAVE_EDITLINE_READLINE_H                    => undef,
                HAVE_EXECINFO_H                             => undef,
                HAVE_EXPLICIT_BZERO                         => undef,
-               HAVE_FDATASYNC                              => 1,
                HAVE_FSEEKO                                 => 1,
                HAVE_FUNCNAME__FUNC                         => undef,
                HAVE_FUNCNAME__FUNCTION                     => 1,