aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/pg_basebackup/walmethods.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c
index bc2e83d02be..3b06ef6269a 100644
--- a/src/bin/pg_basebackup/walmethods.c
+++ b/src/bin/pg_basebackup/walmethods.c
@@ -220,22 +220,21 @@ dir_open_for_write(WalWriteMethod *wwmethod, const char *pathname,
/* Do pre-padding on non-compressed files */
if (pad_to_size && wwmethod->compression_algorithm == PG_COMPRESSION_NONE)
{
- PGAlignedXLogBlock zerobuf;
- int bytes;
+ ssize_t rc;
- memset(zerobuf.data, 0, XLOG_BLCKSZ);
- for (bytes = 0; bytes < pad_to_size; bytes += XLOG_BLCKSZ)
+ rc = pg_pwrite_zeros(fd, pad_to_size);
+
+ if (rc < 0)
{
- errno = 0;
- if (write(fd, zerobuf.data, XLOG_BLCKSZ) != XLOG_BLCKSZ)
- {
- /* If write didn't set errno, assume problem is no disk space */
- wwmethod->lasterrno = errno ? errno : ENOSPC;
- close(fd);
- return NULL;
- }
+ wwmethod->lasterrno = errno;
+ close(fd);
+ return NULL;
}
+ /*
+ * pg_pwrite() (called via pg_pwrite_zeros()) may have moved the file
+ * position, so reset it (see win32pwrite.c).
+ */
if (lseek(fd, 0, SEEK_SET) != 0)
{
wwmethod->lasterrno = errno;