From: Timo Sirainen Date: Fri, 20 Mar 2009 18:05:50 +0000 (-0400) Subject: Added FSYNC flag for transactions. X-Git-Tag: 2.0.alpha1~1038^2~37 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=807b48fe1f6a57b01ed2cc20247d5b5e3facc562;p=thirdparty%2Fdovecot%2Fcore.git Added FSYNC flag for transactions. --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index 17df3aadd5..ab36b94583 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -460,6 +460,8 @@ int mail_index_sync_begin_to(struct mail_index *index, trans_flags = MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL; if ((ctx->flags & MAIL_INDEX_SYNC_FLAG_AVOID_FLAG_UPDATES) != 0) trans_flags |= MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES; + if ((ctx->flags & MAIL_INDEX_SYNC_FLAG_FSYNC) != 0) + trans_flags |= MAIL_INDEX_TRANSACTION_FLAG_FSYNC; ctx->ext_trans = mail_index_transaction_begin(ctx->view, trans_flags); ctx->ext_trans->sync_transaction = TRUE; diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index dbdfbc5bb1..3bc2007d29 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -114,7 +114,9 @@ enum mail_index_transaction_flags { /* Don't add flag updates unless they actually change something. This is reliable only when syncing, otherwise someone else might have already committed a transaction that had changed the flags. */ - MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES = 0x04 + MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES = 0x04, + /* fsync() this transaction (unless fsyncs are disabled) */ + MAIL_INDEX_TRANSACTION_FLAG_FSYNC = 0x08 }; enum mail_index_sync_type { @@ -135,7 +137,9 @@ enum mail_index_sync_flags { MAIL_INDEX_SYNC_FLAG_AVOID_FLAG_UPDATES = 0x04, /* If there are no new transactions and nothing else to do, return 0 in mail_index_sync_begin() */ - MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES = 0x08 + MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES = 0x08, + /* Create the transaction with FSYNC flag */ + MAIL_INDEX_SYNC_FLAG_FSYNC = 0x10 }; enum mail_index_view_sync_flags { diff --git a/src/lib-index/mail-transaction-log-append.c b/src/lib-index/mail-transaction-log-append.c index 2884f36190..d0d4b30428 100644 --- a/src/lib-index/mail-transaction-log-append.c +++ b/src/lib-index/mail-transaction-log-append.c @@ -686,7 +686,8 @@ mail_transaction_log_append_locked(struct mail_index_transaction *t, } } - want_fsync = (view->index->fsync_mask & change_mask) != 0; + want_fsync = (view->index->fsync_mask & change_mask) != 0 || + (t->flags & MAIL_INDEX_TRANSACTION_FLAG_FSYNC) != 0; append_offset = file->sync_offset; if (log_buffer_write(&ctx, want_fsync) < 0) { buffer_free(&ctx.output);