Re: Fix handling of copy_file_range() return value
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: peter@eisentraut.org
Cc: pgsql-hackers@postgresql.org
Date: 2026-06-22T08:34:53Z
Lists: pgsql-hackers
At Mon, 22 Jun 2026 09:19:59 +0200, Peter Eisentraut <peter@eisentraut.org> wrote in > 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. Good catch. I agree with the analysis, and the proposed fix looks reasonable to me. I also checked the other four uses of copy_file_range() in the tree. All but one handle a zero return value as EOF, and the remaining case (check_copy_file_range()) appears safe because it is only testing whether copy_file_range() is usable. Regards, -- Kyotaro Horiguchi NTT Open Source Software Center
Commits
-
Fix handling of copy_file_range() return value
- 090ce6934c34 17 (unreleased) landed
- d36b728949bf 18 (unreleased) landed
- 994f770a0fd5 19 (unreleased) landed
-
Allow using copy_file_range in write_reconstructed_file
- ac8110155132 17.0 cited
-
Add support for incremental backup.
- dc212340058b 17.0 cited