Hi hackers, When I read the code, I noticed that in SimpleLruWriteAll(), only the last error is recorded when the file fails to close. Like the following, ```void SimpleLruWriteAll(SlruCtl ctl, bool allow_redirtied) { SlruShared shared = ctl->shared; SlruWriteAllData fdata; int64 pageno = 0; int prevbank = SlotGetBankNumber(0); bool ok; ... /* * Now close any files that were open */ ok = true; for (int i = 0; i < fdata.num_files; i++) { if (CloseTransientFile(fdata.fd[i]) != 0) { slru_errcause = SLRU_CLOSE_FAILED; slru_errno = errno; pageno = fdata.segno[i] * SLRU_PAGES_PER_SEGMENT; ok = false; } } if (!ok) SlruReportIOError(ctl, pageno, InvalidTransactionId); ``` // Here, SlruReportIOError() is called only once, meaning that the last error message is recorded. In my opinion, since failure to close a file is not common, logging an error message every time a failure occurs will not result in much log growth, but detailed error logging will help in most cases.
So, I changed the code to move the call to SlruReportIOError() inside the while loop. Attached is the patch, I hope it can help.
v1-0001-Fix-error-report-missing-of-SimpleLruWriteAll.patch
Description: Binary data