Fix missing fsync of SLRU directories.
authorThomas Munro <[email protected]>
Wed, 23 Sep 2020 21:26:09 +0000 (09:26 +1200)
committerThomas Munro <[email protected]>
Wed, 23 Sep 2020 22:36:27 +0000 (10:36 +1200)
Harmonize behavior by moving reponsibility for fsyncing directories down
into slru.c.  In 10 and later, only the multixact directories were
missed (see commit 1b02be21), and in older branches all SLRUs were
missed.

Back-patch to all supported releases.

Reviewed-by: Andres Freund <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Discussion: https://postgr.es/m/CA%2BhUKGLtsTUOScnNoSMZ-2ZLv%2BwGh01J6kAo_DM8mTRq1sKdSQ%40mail.gmail.com

src/backend/access/transam/slru.c

index 680a28f198d7330fa4cd2afe8fe2c84d3fe194dd..b4d551fc33a4294dd8f33118a0789049d6e45c66 100644 (file)
@@ -1133,6 +1133,10 @@ SimpleLruFlush(SlruCtl ctl, bool allow_redirtied)
    }
    if (!ok)
        SlruReportIOError(ctl, pageno, InvalidTransactionId);
+
+   /* Ensure that directory entries for new files are on disk. */
+   if (ctl->do_fsync)
+       fsync_fname(ctl->Dir, true);
 }
 
 /*