From 6b454989853075b1bd757c3f1764e366b8b00489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Tue, 22 Feb 2022 23:48:58 +0300 Subject: [PATCH] mdbx: temporary workaround/hotfix for a flaw of Linux 4.19 (at least) unified page/buffer cache. Temporary workaround for https://github.com/erthink/libmdbx/issues/269. --- src/core.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/core.c b/src/core.c index 4f7b9b8a..5c836258 100644 --- a/src/core.c +++ b/src/core.c @@ -12780,6 +12780,22 @@ __cold int mdbx_env_open(MDBX_env *env, const char *pathname, goto bailout; } } +#elif defined(__linux__) || defined(__gnu_linux__) + /* Temporary workaround for Linux 4.19 (at least) kernel's flaw. + * See https://github.com/erthink/libmdbx/issues/269 */ + if ((flags & MDBX_WRITEMAP) == 0 && + mdbx_linux_kernel_version < 0x05040000) { + if (flags & MDBX_ACCEDE) + flags |= MDBX_WRITEMAP; + else { + mdbx_debug_log(MDBX_LOG_ERROR, __func__, __LINE__, + "Linux prior to 5.4 requires MDBX_WRITEMAP because " + "of a flaw of unified page/buffer cache. " + "See https://github.com/erthink/libmdbx/issues/269\n"); + rc = ENOPROTOOPT; + goto bailout; + } + } #endif /* MDBX_MMAP_INCOHERENT_FILE_WRITE */ }