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
        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);
            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)
    {
 
    /* 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;