From 9036e261c4c1cb107029cb5ede784b9327fc8751 Mon Sep 17 00:00:00 2001
From: Hallvard Furuseth <hallvard@openldap.org>
Date: Tue, 6 Sep 2016 17:41:02 +0200
Subject: [PATCH] ITS#7682 F_NOCACHE: Allow error, skip any O_DIRECT

We can run without F_NOCACHE if it fails. And we do not know
what combining it with O_DIRECT means, if a system has both.
---
 libraries/liblmdb/mdb.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index da3593b27d..0575958486 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -9394,17 +9394,12 @@ mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags)
 	}
 
 	if (env->me_psize >= env->me_os_psize) {
-#ifdef O_DIRECT
+#ifdef F_NOCACHE	/* __APPLE__ */
+	(void) fcntl(newfd, F_NOCACHE, 1);
+#elif defined O_DIRECT
 	/* Set O_DIRECT if the file system supports it */
 	if ((rc = fcntl(newfd, F_GETFL)) != -1)
 		(void) fcntl(newfd, F_SETFL, rc | O_DIRECT);
-#endif
-#ifdef F_NOCACHE	/* __APPLE__ */
-	rc = fcntl(newfd, F_NOCACHE, 1);
-	if (rc) {
-		rc = ErrCode();
-		goto leave;
-	}
 #endif
 	}
 
-- 
GitLab