--- db/db/db.c +++ db/db/db.c @@ -591,6 +591,8 @@ __db_dbenv_mpool(dbp, fname, flags) (F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_TXN_NOT_DURABLE : 0), 0, dbp->pgsize)) != 0) return (ret); + if (LF_ISSET(DB_NOFSYNC) && mpf->mfp) + F_SET(mpf->mfp, MP_NOFSYNC); return (0); } --- db/db/db_iface.c +++ db/db/db_iface.c @@ -1068,7 +1068,7 @@ __db_open_arg(dbp, txn, fname, dname, ty #define OKFLAGS \ (DB_AUTO_COMMIT | DB_CREATE | DB_DIRTY_READ | DB_EXCL | \ DB_FCNTL_LOCKING | DB_NO_AUTO_COMMIT | DB_NOMMAP | DB_RDONLY | \ - DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN) + DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN | DB_NOFSYNC) if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0) return (ret); if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE)) --- db/dbinc/db.in +++ db/dbinc/db.in @@ -260,6 +260,7 @@ struct __db_dbt { #define DB_FCNTL_LOCKING 0x0002000 /* UNDOC: fcntl(2) locking. */ #define DB_RDWRMASTER 0x0004000 /* UNDOC: allow subdb master open R/W */ #define DB_WRITEOPEN 0x0008000 /* UNDOC: open with write lock. */ +#define DB_NOFSYNC 0x0010000 /* UNDOC: don't fsync */ /* * Flags private to DB_ENV->txn_begin. --- db/dbinc/mp.h +++ db/dbinc/mp.h @@ -309,6 +309,7 @@ struct __mpoolfile { #define MP_FAKE_UOC 0x080 /* Unlink_on_close field: fake flag. */ #define MP_NOT_DURABLE 0x100 /* File is not durable. */ #define MP_TEMP 0x200 /* Backing file is a temporary. */ +#define MP_NOFSYNC 0x400 /* Don't fsync */ u_int32_t flags; }; --- db/dist/aclocal/options.ac +++ db/dist/aclocal/options.ac @@ -277,10 +277,6 @@ fi # Uniquename excludes C++, Java, RPC. if test "$db_cv_uniquename" = "yes"; then - if test "$db_cv_rpc" = "yes"; then - AC_MSG_ERROR( - [--with-uniquename is not compatible with --enable-rpc]) - fi if test "$db_cv_cxx" = "yes"; then AC_MSG_ERROR( [--with-uniquename is not compatible with --enable-cxx]) --- db/dist/configure.ac +++ db/dist/configure.ac @@ -690,14 +690,14 @@ LTLIBOBJS=`echo "$LIB@&t@OBJS" | AC_SUBST(LTLIBOBJS) # Initial output file list. -CREATE_LIST="Makefile - db_cxx.h:$srcdir/../dbinc/db_cxx.in - db_int.h:$srcdir/../dbinc/db_int.in +CREATE_LIST="Makefile \ + db_cxx.h:$srcdir/../dbinc/db_cxx.in \ + db_int.h:$srcdir/../dbinc/db_int.in \ include.tcl:$srcdir/../test/include.tcl" # MinGW needs win_db.h. if test "$db_cv_mingw" = "yes"; then -CREATE_LIST="$CREATE_LIST +CREATE_LIST="$CREATE_LIST \ win_db.h:$srcdir/win_db.in" fi @@ -705,10 +705,10 @@ fi # prototypes, and, if configured for unique names, a list of #defines # to do DB_VERSION_UNIQUE_NAME substitution. if test "$db_cv_uniquename" = "yes"; then - CREATE_LIST="$CREATE_LIST + CREATE_LIST="$CREATE_LIST \ db.h:$srcdir/../dbinc/db.in:$srcdir/../dbinc_auto/ext_def.in:$srcdir/../dbinc_auto/ext_prot.in" else - CREATE_LIST="$CREATE_LIST + CREATE_LIST="$CREATE_LIST \ db.h:$srcdir/../dbinc/db.in:$srcdir/../dbinc_auto/ext_prot.in" fi @@ -716,7 +716,7 @@ fi # does the DB_VERSION_UNIQUE_NAME substitution), which is included by # the db_int.h file. if test "$db_cv_uniquename" = "yes"; then - CREATE_LIST="$CREATE_LIST + CREATE_LIST="$CREATE_LIST \ db_int_def.h:$srcdir/../dbinc_auto/int_def.in" db_int_def='#include "db_int_def.h"' fi @@ -726,12 +726,12 @@ fi # of #defines to do DB_VERSION_UNIQUE_NAME substitution. if test "$db_cv_compat185" = "yes"; then if test "$db_cv_uniquename" = "yes"; then - CREATE_LIST="$CREATE_LIST - db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in + CREATE_LIST="$CREATE_LIST \ + db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in \ db185_int.h:$srcdir/../db185/db185_int.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in" else - CREATE_LIST="$CREATE_LIST - db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_prot.in + CREATE_LIST="$CREATE_LIST \ + db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_prot.in \ db185_int.h:$srcdir/../db185/db185_int.in:$srcdir/../dbinc_auto/ext_185_prot.in" fi fi --- db/dist/s_config +++ db/dist/s_config @@ -8,7 +8,8 @@ trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 . ./RELEASE echo "autoconf: building aclocal.m4..." -cat aclocal/*.ac aclocal_java/*.ac > aclocal.m4 +cat aclocal/*.ac aclocal_java/*.ac > acinclude.m4 +aclocal echo "autoconf: running autoheader to build config.hin..." rm -f config.hin @@ -20,14 +21,13 @@ rm -f configure autoconf # Edit version information we couldn't pre-compute. -(echo "1,\$s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" && - echo "1,\$s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" && - echo "1,\$s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" && - echo "1,\$s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" && - echo "1,\$s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" && - echo "1,\$s/__EDIT_DB_VERSION__/$DB_VERSION/g" && - echo "w" && - echo "q") | ed configure +sed -e "s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" \ + -e "s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" \ + -e "s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" \ + -e "s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" \ + -e "s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" \ + -e "s/__EDIT_DB_VERSION__/$DB_VERSION/g" \ + -i configure rm -rf autom4te.cache chmod 555 configure --- db/mp/mp_sync.c +++ db/mp/mp_sync.c @@ -553,7 +553,7 @@ done: /* if (ret == 0 && (op == DB_SYNC_CACHE || op == DB_SYNC_FILE)) { if (dbmfp == NULL) ret = __memp_sync_files(dbenv, dbmp); - else + else if (!dbmfp->mfp || !F_ISSET(dbmfp->mfp, MP_NOFSYNC)) ret = __os_fsync(dbenv, dbmfp->fhp); } @@ -600,7 +600,7 @@ int __memp_sync_files(dbenv, dbmp) MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp); for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq); dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q)) { - if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY)) + if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY | MP_NOFSYNC)) continue; ret = __os_fsync(dbenv, dbmfp->fhp); break; @@ -662,6 +662,9 @@ __memp_mf_sync(dbmp, mfp) dbenv = dbmp->dbenv; + if (F_ISSET(mfp, MP_NOFSYNC)) + return 0; + /* * Expects caller to be holding the region lock: we're using the path * name and __memp_nameop might try and rename the file.