Commit d08c3d51 authored by Michael Paquier's avatar Michael Paquier

Correct handling of fsync failures with tar mode of walmethods.c

This file has been missing the fact that it needs to report back to
callers a proper failure on fsync calls.  I have spotted the one in
tar_finish() while Kuntal has spotted the one in tar_close().

Backpatch down to 10 where this code has been introduced.

Reported by: Michael Paquier, Kuntal Ghosh
Author: Michael Paquier
Reviewed-by: Kuntal Ghosh, Magnus Hagander
Discussion: https://postgr.es/m/20180625024356.GD1146@paquier.xyz
parent 322548a8
......@@ -865,7 +865,8 @@ tar_close(Walfile f, WalCloseMethod method)
return -1;
/* Always fsync on close, so the padding gets fsynced */
tar_sync(f);
if (tar_sync(f) < 0)
return -1;
/* Clean up and done */
pg_free(tf->pathname);
......@@ -896,7 +897,7 @@ tar_finish(void)
return false;
}
/* A tarfile always ends with two empty blocks */
/* A tarfile always ends with two empty blocks */
MemSet(zerobuf, 0, sizeof(zerobuf));
if (!tar_data->compression)
{
......@@ -957,7 +958,10 @@ tar_finish(void)
/* sync the empty blocks as well, since they're after the last file */
if (tar_data->sync)
fsync(tar_data->fd);
{
if (fsync(tar_data->fd) != 0)
return false;
}
if (close(tar_data->fd) != 0)
return false;
......
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