diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c
index e628c9bd89d74a33923f3a3311285a381ce15909..bbb04d90e8265d41ee55e27eb9bebcadf0f2cd31 100644
--- a/src/backend/access/heap/rewriteheap.c
+++ b/src/backend/access/heap/rewriteheap.c
@@ -1162,6 +1162,7 @@ heap_xlog_logical_rewrite(XLogReaderState *r)
 	len = xlrec->num_mappings * sizeof(LogicalRewriteMappingData);
 
 	/* write out tail end of mapping file (again) */
+	errno = 0;
 	if (write(fd, data, len) != len)
 	{
 		/* if write didn't set errno, assume problem is no disk space */
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index a23eed568318f391e46b100d3579eccc412fe00e..4429dc20083d915ad70c15c675f73b48abb02b41 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1553,6 +1553,7 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len)
 						path)));
 
 	/* Write content and CRC */
+	errno = 0;
 	if (write(fd, content, len) != len)
 	{
 		int			save_errno = errno;
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index d6bae6cc89768bb740ee1cce38456b005c32fd8f..7b1385968cafb114629f48dd9f9864fd6d854c1a 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -547,6 +547,7 @@ CheckPointReplicationOrigin(void)
 						tmppath)));
 
 	/* write magic */
+	errno = 0;
 	if ((write(tmpfd, &magic, sizeof(magic))) != sizeof(magic))
 	{
 		int			save_errno = errno;
@@ -590,6 +591,7 @@ CheckPointReplicationOrigin(void)
 		/* make sure we only write out a commit that's persistent */
 		XLogFlush(local_lsn);
 
+		errno = 0;
 		if ((write(tmpfd, &disk_state, sizeof(disk_state))) !=
 			sizeof(disk_state))
 		{
@@ -612,6 +614,7 @@ CheckPointReplicationOrigin(void)
 
 	/* write out the CRC */
 	FIN_CRC32C(crc);
+	errno = 0;
 	if ((write(tmpfd, &crc, sizeof(crc))) != sizeof(crc))
 	{
 		int			save_errno = errno;
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 47e669578f2a2109d0768552c19d577787a0506a..de5d2c6a1861482d2192dcec22840a933e4509f4 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -2479,6 +2479,7 @@ ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
 
 	ondisk->size = sz;
 
+	errno = 0;
 	if (write(fd, rb->outbuf, ondisk->size) != ondisk->size)
 	{
 		int			save_errno = errno;
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index 77997ec2e351b60b8b633e05b8510f069b84ff41..d8d8f03cdf9ca6cec2912541b2ee6c102f586f5e 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1588,6 +1588,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
 		ereport(ERROR,
 				(errmsg("could not open file \"%s\": %m", path)));
 
+	errno = 0;
 	if ((write(fd, ondisk, needed_length)) != needed_length)
 	{
 		int			save_errno = errno;
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 59b0d846226689d203aee8613c6077a0eca40c39..62cdf2d9eacef00b830c6390fd109a87a6784756 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -1080,6 +1080,7 @@ SaveSlotToPath(ReplicationSlot *slot, const char *dir, int elevel)
 				SnapBuildOnDiskChecksummedSize);
 	FIN_CRC32C(cp.checksum);
 
+	errno = 0;
 	if ((write(fd, &cp, sizeof(cp))) != sizeof(cp))
 	{
 		int			save_errno = errno;
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index c9fb4198b07f1869c115b3d4db2ae7d4012c3dfc..79072a7939a6c4b91c77e7683d04364650fc8c0f 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -147,6 +147,7 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint)
 	zerobuf = pg_malloc0(XLOG_BLCKSZ);
 	for (bytes = 0; bytes < XLogSegSize; bytes += XLOG_BLCKSZ)
 	{
+		errno = 0;
 		if (write(f, zerobuf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
 		{
 			/* if write didn't set errno, assume problem is no disk space */
@@ -1189,6 +1190,7 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len,
 			}
 		}
 
+		errno = 0;
 		if (write(walfile,
 				  copybuf + hdr_len + bytes_written,
 				  bytes_to_write) != bytes_to_write)