While checking return/error handling of file system calls, I found that
the copy_file_range() call in pg_combinebackup has a potential problem.
If copy_file_range() returns 0, which is a documented condition, then
the loop never makes progress and could spin forever.
The other uses of copy_file_range() in the tree are surrounded by
different logic and don't appear to have this problem.
My suggested fix is to make a return value of 0 an error. It most
likely indicates that the source file has an unexpected size.