Обсуждение: [PATCH] Fix EINTR retry condition in pg_flush_data sync_file_range path.

Поиск
Список
Период
Сортировка

[PATCH] Fix EINTR retry condition in pg_flush_data sync_file_range path.

От
DaeMyung Kang
Дата:
Hi, Hackers,

While auditing src/backend/storage/file, I spotted a small but
unambiguous bug in pg_flush_data()'s sync_file_range() retry path.
Details below in the commit message; the fix is a one-token change.

Thanks,
DaeMyung

---

The retry branch compared the syscall return value (rc) against EINTR,
but sync_file_range() returns -1 on error and reports the actual errno
out-of-band, so rc == EINTR was always false and the retry was dead
code.  When sync_file_range() was actually interrupted by a signal,
control fell through to the warning/error path instead of retrying.

Compare errno instead, matching the convention already used elsewhere
in this file (e.g. the pg_pread/pg_pwrite EINTR retries) and a few
lines down for ENOSYS in this same block.
---
 src/backend/storage/file/fd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


Вложения

Re: [PATCH] Fix EINTR retry condition in pg_flush_data sync_file_range path.

От
Michael Paquier
Дата:
On Thu, Apr 30, 2026 at 12:18:11AM +0900, DaeMyung Kang wrote:
> While auditing src/backend/storage/file, I spotted a small but
> unambiguous bug in pg_flush_data()'s sync_file_range() retry path.
> Details below in the commit message; the fix is a one-token change.

Ohh, nice catch.  This happens to be wrong since 0d369ac65004.
--
Michael

Вложения