yes, we're still non-coherent for mmap/file io Index: servers/slapd/back-mdb/init.c --- servers/slapd/back-mdb/init.c.orig +++ servers/slapd/back-mdb/init.c @@ -170,6 +170,32 @@ mdb_db_open( BackendDB *be, ConfigReply *cr ) flags = mdb->mi_dbenv_flags; +#ifdef __OpenBSD__ + /* + * Enforce that MDB_WRITEMAP is set. + * + * MDB assumes a unified buffer cache. + * + * See http://www.openldap.org/pub/hyc/mdm-paper.pdf section 3.1, + * references 17, 18, and 19. + * + * From Howard Chu: "This requirement can be relaxed in the + * current version of the library. If you create the environment + * with the MDB_WRITEMAP option then all reads and writes are + * performed using mmap, so the file buffer cache is irrelevant. + * Of course then you lose the protection that the read-only + * map offers." + */ + + if ( !(flags & MDB_WRITEMAP) ) { + flags |= MDB_WRITEMAP; + Debug( LDAP_DEBUG_ANY, + LDAP_XSTRING(mdb_db_open) ": forcing writemap for database \"%s\". " + "This is required on systems without unified buffer cache.\n", + be->be_suffix[0].bv_val, rc, 0 ); + } +#endif + if ( slapMode & SLAP_TOOL_QUICK ) flags |= MDB_NOSYNC|MDB_WRITEMAP;