aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_basebackup/walmethods.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_basebackup/walmethods.c')
-rw-r--r--src/bin/pg_basebackup/walmethods.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c
index 267a40debbf..331d0e72757 100644
--- a/src/bin/pg_basebackup/walmethods.c
+++ b/src/bin/pg_basebackup/walmethods.c
@@ -128,7 +128,11 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_
pg_free(zerobuf);
close(fd);
- errno = save_errno;
+
+ /*
+ * If write didn't set errno, assume problem is no disk space.
+ */
+ errno = save_errno ? save_errno : ENOSPC;
return NULL;
}
}
@@ -442,7 +446,14 @@ tar_write_compressed_data(void *buf, size_t count, bool flush)
size_t len = ZLIB_OUT_SIZE - tar_data->zp->avail_out;
if (write(tar_data->fd, tar_data->zlibOut, len) != len)
+ {
+ /*
+ * If write didn't set errno, assume problem is no disk space.
+ */
+ if (errno == 0)
+ errno = ENOSPC;
return false;
+ }
tar_data->zp->next_out = tar_data->zlibOut;
tar_data->zp->avail_out = ZLIB_OUT_SIZE;
@@ -623,7 +634,8 @@ tar_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_
save_errno = errno;
pg_free(tar_data->currentfile);
tar_data->currentfile = NULL;
- errno = save_errno;
+ /* if write didn't set errno, assume problem is no disk space */
+ errno = save_errno ? save_errno : ENOSPC;
return NULL;
}
}
@@ -818,7 +830,12 @@ tar_close(Walfile f, WalCloseMethod method)
if (!tar_data->compression)
{
if (write(tar_data->fd, tf->header, 512) != 512)
+ {
+ /* if write didn't set errno, assume problem is no disk space */
+ if (errno == 0)
+ errno = ENOSPC;
return -1;
+ }
}
#ifdef HAVE_LIBZ
else
@@ -884,7 +901,12 @@ tar_finish(void)
if (!tar_data->compression)
{
if (write(tar_data->fd, zerobuf, sizeof(zerobuf)) != sizeof(zerobuf))
+ {
+ /* if write didn't set errno, assume problem is no disk space */
+ if (errno == 0)
+ errno = ENOSPC;
return false;
+ }
}
#ifdef HAVE_LIBZ
else
@@ -911,7 +933,15 @@ tar_finish(void)
size_t len = ZLIB_OUT_SIZE - tar_data->zp->avail_out;
if (write(tar_data->fd, tar_data->zlibOut, len) != len)
+ {
+ /*
+ * If write didn't set errno, assume problem is no disk
+ * space.
+ */
+ if (errno == 0)
+ errno = ENOSPC;
return false;
+ }
}
if (r == Z_STREAM_END)
break;