Browse Source

Import from SAMBA tdb:
commit 4b4fec65db4e202afa13b2d15867f4d8a54d154e
Author: Andrew Tridgell <tridge@samba.org>
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.

Rusty Russell 16 years ago
parent
commit
c5316eef05
1 changed files with 7 additions and 5 deletions
  1. 7 5
      ccan/tdb/transaction.c

+ 7 - 5
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)
 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) {
 	if (fsync(tdb->fd) != 0) {
 		tdb->ecode = TDB_ERR_IO;
 		tdb->ecode = TDB_ERR_IO;
 		TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_transaction: fsync failed\n"));
 		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);
 	SAFE_FREE(tdb->transaction->blocks);
 	tdb->transaction->num_blocks = 0;
 	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);
 	tdb_brlock(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0, 1);