diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c
index 8c00ec9a3b1a27177cf1db8de96e4354d0452585..971ae73f5444ac07372c6f6ef604edd345651a2d 100644
--- a/src/bin/pg_checksums/pg_checksums.c
+++ b/src/bin/pg_checksums/pg_checksums.c
@@ -198,8 +198,12 @@ scan_file(const char *fn, BlockNumber segmentno)
 			break;
 		if (r != BLCKSZ)
 		{
-			pg_log_error("could not read block %u in file \"%s\": read %d of %d",
-						 blockno, fn, r, BLCKSZ);
+			if (r < 0)
+				pg_log_error("could not read block %u in file \"%s\": %m",
+							 blockno, fn);
+			else
+				pg_log_error("could not read block %u in file \"%s\": read %d of %d",
+							 blockno, fn, r, BLCKSZ);
 			exit(1);
 		}
 		blocks++;
@@ -222,6 +226,8 @@ scan_file(const char *fn, BlockNumber segmentno)
 		}
 		else if (mode == PG_MODE_ENABLE)
 		{
+			int		w;
+
 			/* Set checksum in page header */
 			header->pd_checksum = csum;
 
@@ -233,10 +239,15 @@ scan_file(const char *fn, BlockNumber segmentno)
 			}
 
 			/* Write block with checksum */
-			if (write(f, buf.data, BLCKSZ) != BLCKSZ)
+			w = write(f, buf.data, BLCKSZ);
+			if (w != BLCKSZ)
 			{
-				pg_log_error("could not write block %u in file \"%s\": %m",
-							 blockno, fn);
+				if (w < 0)
+					pg_log_error("could not write block %u in file \"%s\": %m",
+								 blockno, fn);
+				else
+					pg_log_error("could not write block %u in file \"%s\": wrote %d of %d",
+								 blockno, fn, w, BLCKSZ);
 				exit(1);
 			}
 		}