diff --git a/configure b/configure
index d4a544d5c8fc06f5b76b158872a5ab731799962a..c685ca3f918c9a5bdecf1ad7e83933073015824c 100755
--- a/configure
+++ b/configure
@@ -19763,8 +19763,7 @@ LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
 
 
 
-
-for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll posix_fallocate pstat readlink setproctitle setsid sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l
+for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat readlink setproctitle setsid sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l
 do
 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
diff --git a/configure.in b/configure.in
index fe2541952f1e708e773efa6e0c847424d23f83e8..82771bddb12ab584c9ba4f42e8f39570372fe100 100644
--- a/configure.in
+++ b/configure.in
@@ -1230,7 +1230,7 @@ PGAC_FUNC_GETTIMEOFDAY_1ARG
 LIBS_including_readline="$LIBS"
 LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
 
-AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll posix_fallocate pstat readlink setproctitle setsid sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l])
+AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat readlink setproctitle setsid sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l])
 
 AC_REPLACE_FUNCS(fseeko)
 case $host_os in
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 386811389d728da581bf6c5c30b7262d783e3f64..dc47c4760bf253e8855ad7b21ae2864f2a502367 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -3353,10 +3353,11 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock)
 {
 	char		path[MAXPGPATH];
 	char		tmppath[MAXPGPATH];
+	char	   *zbuffer;
 	XLogSegNo	installed_segno;
 	int			max_advance;
 	int			fd;
-	bool		zero_fill = true;
+	int			nbytes;
 
 	XLogFilePath(path, ThisTimeLineID, logsegno);
 
@@ -3390,6 +3391,16 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock)
 
 	unlink(tmppath);
 
+	/*
+	 * Allocate a buffer full of zeros. This is done before opening the file
+	 * so that we don't leak the file descriptor if palloc fails.
+	 *
+	 * Note: palloc zbuffer, instead of just using a local char array, to
+	 * ensure it is reasonably well-aligned; this may save a few cycles
+	 * transferring data to the kernel.
+	 */
+	zbuffer = (char *) palloc0(XLOG_BLCKSZ);
+
 	/* do not use get_sync_bit() here --- want to fsync only at end of fill */
 	fd = BasicOpenFile(tmppath, O_RDWR | O_CREAT | O_EXCL | PG_BINARY,
 					   S_IRUSR | S_IWUSR);
@@ -3398,66 +3409,38 @@ XLogFileInit(XLogSegNo logsegno, bool *use_existent, bool use_lock)
 				(errcode_for_file_access(),
 				 errmsg("could not create file \"%s\": %m", tmppath)));
 
-#ifdef HAVE_POSIX_FALLOCATE
 	/*
-	 * If posix_fallocate() is available and succeeds, then the file is
-	 * properly allocated and we don't need to zero-fill it (which is less
-	 * efficient).  In case of an error, fall back to writing zeros, because on
-	 * some platforms posix_fallocate() is available but will not always
-	 * succeed in cases where zero-filling will.
+	 * Zero-fill the file.	We have to do this the hard way to ensure that all
+	 * the file space has really been allocated --- on platforms that allow
+	 * "holes" in files, just seeking to the end doesn't allocate intermediate
+	 * space.  This way, we know that we have all the space and (after the
+	 * fsync below) that all the indirect blocks are down on disk.	Therefore,
+	 * fdatasync(2) or O_DSYNC will be sufficient to sync future writes to the
+	 * log file.
 	 */
-	if (posix_fallocate(fd, 0, XLogSegSize) == 0)
-		zero_fill = false;
-#endif /* HAVE_POSIX_FALLOCATE */
-
-	if (zero_fill)
+	for (nbytes = 0; nbytes < XLogSegSize; nbytes += XLOG_BLCKSZ)
 	{
-		/*
-		 * Allocate a buffer full of zeros. This is done before opening the
-		 * file so that we don't leak the file descriptor if palloc fails.
-		 *
-		 * Note: palloc zbuffer, instead of just using a local char array, to
-		 * ensure it is reasonably well-aligned; this may save a few cycles
-		 * transferring data to the kernel.
-		 */
-
-		char	*zbuffer = (char *) palloc0(XLOG_BLCKSZ);
-		int		 nbytes;
-
-		/*
-		 * Zero-fill the file. We have to do this the hard way to ensure that
-		 * all the file space has really been allocated --- on platforms that
-		 * allow "holes" in files, just seeking to the end doesn't allocate
-		 * intermediate space.  This way, we know that we have all the space
-		 * and (after the fsync below) that all the indirect blocks are down on
-		 * disk. Therefore, fdatasync(2) or O_DSYNC will be sufficient to sync
-		 * future writes to the log file.
-		 */
-		for (nbytes = 0; nbytes < XLogSegSize; nbytes += XLOG_BLCKSZ)
+		errno = 0;
+		if ((int) write(fd, zbuffer, XLOG_BLCKSZ) != (int) XLOG_BLCKSZ)
 		{
-			errno = 0;
-			if ((int) write(fd, zbuffer, XLOG_BLCKSZ) != (int) XLOG_BLCKSZ)
-			{
-				int			save_errno = errno;
+			int			save_errno = errno;
 
-				/*
-				 * If we fail to make the file, delete it to release disk space
-				 */
-				unlink(tmppath);
+			/*
+			 * If we fail to make the file, delete it to release disk space
+			 */
+			unlink(tmppath);
 
-				close(fd);
+			close(fd);
 
-				/* if write didn't set errno, assume no disk space */
-				errno = save_errno ? save_errno : ENOSPC;
+			/* if write didn't set errno, assume problem is no disk space */
+			errno = save_errno ? save_errno : ENOSPC;
 
-				ereport(ERROR,
-						(errcode_for_file_access(),
-						 errmsg("could not write to file \"%s\": %m",
-								tmppath)));
-			}
+			ereport(ERROR,
+					(errcode_for_file_access(),
+					 errmsg("could not write to file \"%s\": %m", tmppath)));
 		}
-		pfree(zbuffer);
 	}
+	pfree(zbuffer);
 
 	if (pg_fsync(fd) != 0)
 	{
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 033127beff86b6051a31c0a5c21ee1c393d47861..8aabf3c87a4706a2181f5d59eb93d8587ce65044 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -369,9 +369,6 @@
 /* Define to 1 if you have the `posix_fadvise' function. */
 #undef HAVE_POSIX_FADVISE
 
-/* Define to 1 if you have the `posix_fallocate' function. */
-#undef HAVE_POSIX_FALLOCATE
-
 /* Define to 1 if you have the POSIX signal interface. */
 #undef HAVE_POSIX_SIGNALS
 
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 931551086b7040a41ced9a29f42871753a72ad8f..54db287aff6178c81c1f794208459a40b5aea0e2 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -276,9 +276,6 @@
 /* Define to 1 if you have the <poll.h> header file. */
 /* #undef HAVE_POLL_H */
 
-/* Define to 1 if you have the `posix_fallocate' function. */
-/* #undef HAVE_POSIX_FALLOCATE */
-
 /* Define to 1 if you have the POSIX signal interface. */
 /* #undef HAVE_POSIX_SIGNALS */