From c5316eef05ab024c44224a165282e8df8ad30285 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 29 Jul 2009 22:22:31 +0930 Subject: [PATCH] Import from SAMBA tdb: commit 4b4fec65db4e202afa13b2d15867f4d8a54d154e Author: Andrew Tridgell Date: Thu May 28 16:08:28 2009 +1000 make TDB_NOSYNC affect all the fsync/msync calls in transactions During a transaction commit tdb normally uses fsync/msync calls to make it crash safe. This can be disabled using the TDB_NOSYNC flag, but it wasn't disabling all the code paths that caused a fsync/msync. --- ccan/tdb/transaction.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ccan/tdb/transaction.c b/ccan/tdb/transaction.c index 4c261598..1086c5f0 100644 --- a/ccan/tdb/transaction.c +++ b/ccan/tdb/transaction.c @@ -423,6 +423,10 @@ static const struct tdb_methods transaction_methods = { */ static int transaction_sync(struct tdb_context *tdb, tdb_off_t offset, tdb_len_t length) { + if (tdb->flags & TDB_NOSYNC) { + return 0; + } + if (fsync(tdb->fd) != 0) { tdb->ecode = TDB_ERR_IO; TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction: fsync failed\n")); @@ -1066,11 +1070,9 @@ int tdb_transaction_commit(struct tdb_context *tdb) SAFE_FREE(tdb->transaction->blocks); tdb->transaction->num_blocks = 0; - if (!(tdb->flags & TDB_NOSYNC)) { - /* ensure the new data is on disk */ - if (transaction_sync(tdb, 0, tdb->map_size) == -1) { - return -1; - } + /* ensure the new data is on disk */ + if (transaction_sync(tdb, 0, tdb->map_size) == -1) { + return -1; } tdb_brlock(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0, 1); -- 2.39.2