Commit c5316eef authored by Rusty Russell's avatar Rusty Russell

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.
parent 8f4a253c
...@@ -423,6 +423,10 @@ static const struct tdb_methods transaction_methods = { ...@@ -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) ...@@ -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 */
/* ensure the new data is on disk */ if (transaction_sync(tdb, 0, tdb->map_size) == -1) {
if (transaction_sync(tdb, 0, tdb->map_size) == -1) { return -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment