Commit 1d7a6e3e authored by Peter Eisentraut's avatar Peter Eisentraut

pg_checksums: Handle read and write returns correctly

The read() return was not checking for errors, the write() return was
not checking for short writes.
Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
Discussion: https://www.postgresql.org/message-id/flat/5de61b6b-8be9-7771-0048-860328efe027%402ndquadrant.com
parent 396e4afd
...@@ -198,8 +198,12 @@ scan_file(const char *fn, BlockNumber segmentno) ...@@ -198,8 +198,12 @@ scan_file(const char *fn, BlockNumber segmentno)
break; break;
if (r != BLCKSZ) if (r != BLCKSZ)
{ {
pg_log_error("could not read block %u in file \"%s\": read %d of %d", if (r < 0)
blockno, fn, r, BLCKSZ); 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); exit(1);
} }
blocks++; blocks++;
...@@ -222,6 +226,8 @@ scan_file(const char *fn, BlockNumber segmentno) ...@@ -222,6 +226,8 @@ scan_file(const char *fn, BlockNumber segmentno)
} }
else if (mode == PG_MODE_ENABLE) else if (mode == PG_MODE_ENABLE)
{ {
int w;
/* Set checksum in page header */ /* Set checksum in page header */
header->pd_checksum = csum; header->pd_checksum = csum;
...@@ -233,10 +239,15 @@ scan_file(const char *fn, BlockNumber segmentno) ...@@ -233,10 +239,15 @@ scan_file(const char *fn, BlockNumber segmentno)
} }
/* Write block with checksum */ /* 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", if (w < 0)
blockno, fn); 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); exit(1);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment