dovecot-2.0: index: Removed duplication of mail_index_open_flags...

dovecot at dovecot.org dovecot at dovecot.org
Fri Jul 31 00:52:47 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/126132cb1c19
changeset: 9696:126132cb1c19
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Jul 30 17:52:41 2009 -0400
description:
index: Removed duplication of mail_index_open_flags from struct mail_index.

diffstat:

17 files changed, 87 insertions(+), 70 deletions(-)
src/lib-index/mail-cache-compress.c          |    2 -
src/lib-index/mail-cache-sync-update.c       |   10 +++++----
src/lib-index/mail-cache-transaction.c       |    2 -
src/lib-index/mail-cache.c                   |   22 +++++++++++----------
src/lib-index/mail-index-lock.c              |    2 -
src/lib-index/mail-index-map-read.c          |    6 ++---
src/lib-index/mail-index-private.h           |    7 ------
src/lib-index/mail-index-strmap.c            |    9 +++++---
src/lib-index/mail-index-sync-update.c       |    2 -
src/lib-index/mail-index-write.c             |   14 ++++++++-----
src/lib-index/mail-index.c                   |   27 ++++++++++----------------
src/lib-index/mail-transaction-log-append.c  |    5 ++--
src/lib-index/mail-transaction-log-file.c    |   12 ++++++-----
src/lib-index/mail-transaction-log-private.h |    1 
src/lib-index/mail-transaction-log.c         |   18 +++++++++++------
src/lib-index/mailbox-list-index-sync.c      |    4 ++-
src/lib-index/mailbox-list-index.c           |   14 ++++++++-----

diffs (truncated from 519 to 300 lines):

diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-cache-compress.c
--- a/src/lib-index/mail-cache-compress.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-cache-compress.c	Thu Jul 30 17:52:41 2009 -0400
@@ -296,7 +296,7 @@ mail_cache_copy(struct mail_cache *cache
 
 	o_stream_destroy(&output);
 
-	if (cache->index->nfs_flush) {
+	if ((cache->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 		if (fdatasync(fd) < 0) {
 			mail_cache_set_syscall_error(cache, "fdatasync()");
 			array_free(ext_offsets);
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-cache-sync-update.c
--- a/src/lib-index/mail-cache-sync-update.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-cache-sync-update.c	Thu Jul 30 17:52:41 2009 -0400
@@ -111,7 +111,8 @@ int mail_cache_sync_handler(struct mail_
 			    void **context)
 {
 	struct mail_index_view *view = sync_ctx->view;
-	struct mail_cache *cache = view->index->cache;
+	struct mail_index *index = view->index;
+	struct mail_cache *cache = index->cache;
 	struct mail_cache_sync_context *ctx = *context;
 	const uint32_t *old_cache_offset = old_data;
 	const uint32_t *new_cache_offset = new_data;
@@ -128,9 +129,10 @@ int mail_cache_sync_handler(struct mail_
 	ctx = mail_cache_handler_init(context);
 	if (cache->file_cache != NULL && !MAIL_CACHE_IS_UNUSABLE(cache)) {
 		/* flush read cache only once per sync */
-		if (!ctx->nfs_read_cache_flushed && cache->index->nfs_flush) {
+		if (!ctx->nfs_read_cache_flushed &&
+		    (index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 			ctx->nfs_read_cache_flushed = TRUE;
-			mail_index_flush_read_cache(cache->index,
+			mail_index_flush_read_cache(index,
 						    cache->filepath, cache->fd,
 						    cache->locked);
 		}
@@ -151,7 +153,7 @@ int mail_cache_sync_handler(struct mail_
 
 	mail_transaction_log_view_get_prev_pos(view->log_view,
 					       &cur_seq, &cur_offset);
-	mail_transaction_log_get_mailbox_sync_pos(view->index->log,
+	mail_transaction_log_get_mailbox_sync_pos(index->log,
 						  &tail_seq, &tail_offset);
 	if (LOG_IS_BEFORE(cur_seq, cur_offset, tail_seq, tail_offset)) {
 		/* already been linked */
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-cache-transaction.c
--- a/src/lib-index/mail-cache-transaction.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-cache-transaction.c	Thu Jul 30 17:52:41 2009 -0400
@@ -839,7 +839,7 @@ mail_cache_header_fields_write(struct ma
 	if (mail_cache_write(cache, buffer->data, size, offset) < 0)
 		return -1;
 
-	if (cache->index->nfs_flush) {
+	if ((cache->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 		if (fdatasync(cache->fd) < 0) {
 			mail_cache_set_syscall_error(cache, "fdatasync()");
 			return -1;
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-cache.c
--- a/src/lib-index/mail-cache.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-cache.c	Thu Jul 30 17:52:41 2009 -0400
@@ -19,7 +19,8 @@ void mail_cache_set_syscall_error(struct
 
 	if (ENOSPACE(errno)) {
 		cache->index->nodiskspace = TRUE;
-		if (!cache->index->never_in_memory)
+		if ((cache->index->flags &
+		     MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY) == 0)
 			return;
 	}
 
@@ -111,7 +112,7 @@ static bool mail_cache_need_reopen(struc
 		return TRUE;
 
 	/* see if the file has changed */
-	if (cache->index->nfs_flush) {
+	if ((cache->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 		i_assert(!cache->locked);
 		nfs_flush_file_handle_cache(cache->filepath);
 	}
@@ -126,7 +127,7 @@ static bool mail_cache_need_reopen(struc
 		return TRUE;
 	}
 
-	if (cache->index->nfs_flush) {
+	if ((cache->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 		/* if the old file has been deleted, the new file may have
 		   the same inode as the old one. we'll catch this here by
 		   checking if fstat() fails with ESTALE */
@@ -413,15 +414,16 @@ static struct mail_cache *mail_cache_all
 		hash_table_create(default_pool, cache->field_pool, 0,
 				  strcase_hash, (hash_cmp_callback_t *)strcasecmp);
 
-	cache->dotlock_settings.use_excl_lock = index->use_excl_dotlocks;
-	cache->dotlock_settings.nfs_flush = index->nfs_flush;
+	cache->dotlock_settings.use_excl_lock =
+		(index->flags & MAIL_INDEX_OPEN_FLAG_DOTLOCK_USE_EXCL) != 0;
+	cache->dotlock_settings.nfs_flush =
+		(index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0;
 	cache->dotlock_settings.timeout = MAIL_CACHE_LOCK_TIMEOUT;
 	cache->dotlock_settings.stale_timeout = MAIL_CACHE_LOCK_CHANGE_TIMEOUT;
 
-	if (!MAIL_INDEX_IS_IN_MEMORY(index)) {
-		if (index->mmap_disable)
-			cache->file_cache = file_cache_new(-1);
-	}
+	if (!MAIL_INDEX_IS_IN_MEMORY(index) &&
+	    (index->flags & MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE) != 0)
+		cache->file_cache = file_cache_new(-1);
 
 	cache->ext_id =
 		mail_index_ext_register(index, "cache", 0,
@@ -653,7 +655,7 @@ int mail_cache_unlock(struct mail_cache 
 		mail_cache_update_need_compress(cache);
 	}
 
-	if (cache->index->nfs_flush) {
+	if ((cache->index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 		if (fdatasync(cache->fd) < 0)
 			mail_cache_set_syscall_error(cache, "fdatasync()");
 	}
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index-lock.c
--- a/src/lib-index/mail-index-lock.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index-lock.c	Thu Jul 30 17:52:41 2009 -0400
@@ -123,7 +123,7 @@ void mail_index_flush_read_cache(struct 
 void mail_index_flush_read_cache(struct mail_index *index, const char *path,
 				 int fd, bool locked)
 {
-	if (!index->nfs_flush)
+	if ((index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) == 0)
 		return;
 
 	/* Assume flock() is emulated with fcntl(), because that's how most
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index-map-read.c
--- a/src/lib-index/mail-index-map-read.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index-map-read.c	Thu Jul 30 17:52:41 2009 -0400
@@ -317,7 +317,7 @@ static int mail_index_map_latest_file(st
 	if (mail_index_lock_shared(index, &lock_id) < 0)
 		return -1;
 
-	if (index->nfs_flush)
+	if ((index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0)
 		nfs_flush_attr_cache_fd_locked(index->filepath, index->fd);
 
 	if (fstat(index->fd, &st) == 0)
@@ -333,8 +333,8 @@ static int mail_index_map_latest_file(st
 
 	/* mmaping seems to be slower than just reading the file, so even if
 	   mmap isn't disabled don't use it unless the file is large enough */
-	use_mmap = !index->mmap_disable && file_size != (uoff_t)-1 &&
-		file_size > MAIL_INDEX_MMAP_MIN_SIZE;
+	use_mmap = (index->flags & MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE) == 0 &&
+		file_size != (uoff_t)-1 && file_size > MAIL_INDEX_MMAP_MIN_SIZE;
 
 	new_map = mail_index_map_alloc(index);
 	if (use_mmap) {
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index-private.h
--- a/src/lib-index/mail-index-private.h	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index-private.h	Thu Jul 30 17:52:41 2009 -0400
@@ -170,6 +170,7 @@ struct mail_index {
 	struct mail_cache *cache;
 	struct mail_transaction_log *log;
 
+	enum mail_index_open_flags flags;
 	enum mail_index_sync_type fsync_mask;
 	mode_t mode;
 	gid_t gid;
@@ -223,12 +224,7 @@ struct mail_index {
 
 	unsigned int opened:1;
 	unsigned int log_locked:1;
-	unsigned int mmap_disable:1;
-	unsigned int fsync_disable:1;
-	unsigned int use_excl_dotlocks:1;
-	unsigned int nfs_flush:1;
 	unsigned int readonly:1;
-	unsigned int keep_backups:1;
 	unsigned int mapping:1;
 	unsigned int syncing:1;
 	unsigned int need_recreate:1;
@@ -236,7 +232,6 @@ struct mail_index {
 	unsigned int modseqs_enabled:1;
 	unsigned int initial_create:1;
 	unsigned int initial_mapped:1;
-	unsigned int never_in_memory:1;
 };
 
 extern struct mail_index_module_register mail_index_module_register;
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index-strmap.c
--- a/src/lib-index/mail-index-strmap.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index-strmap.c	Thu Jul 30 17:52:41 2009 -0400
@@ -108,8 +108,10 @@ mail_index_strmap_init(struct mail_index
 	strmap->fd = -1;
 
 	strmap->dotlock_settings = default_dotlock_settings;
-	strmap->dotlock_settings.use_excl_lock = index->use_excl_dotlocks;
-	strmap->dotlock_settings.nfs_flush = index->nfs_flush;
+	strmap->dotlock_settings.use_excl_lock =
+		(index->flags & MAIL_INDEX_OPEN_FLAG_DOTLOCK_USE_EXCL) != 0;
+	strmap->dotlock_settings.nfs_flush =
+		(index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0;
 	return strmap;
 }
 
@@ -125,7 +127,8 @@ mail_index_strmap_set_syscall_error(stru
 
 	if (ENOSPACE(errno)) {
 		strmap->index->nodiskspace = TRUE;
-		if (!strmap->index->never_in_memory)
+		if ((strmap->index->flags &
+		     MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY) == 0)
 			return;
 	}
 
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index-sync-update.c
--- a/src/lib-index/mail-index-sync-update.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index-sync-update.c	Thu Jul 30 17:52:41 2009 -0400
@@ -860,7 +860,7 @@ int mail_index_sync_map(struct mail_inde
 
 	start_offset = type == MAIL_INDEX_SYNC_HANDLER_FILE ?
 		map->hdr.log_file_tail_offset : map->hdr.log_file_head_offset;
-	if (!force && !index->mmap_disable) {
+	if (!force && (index->flags & MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE) == 0) {
 		/* see if we'd prefer to reopen the index file instead of
 		   syncing the current map from the transaction log.
 		   don't check this if mmap is disabled, because reopening
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index-write.c
--- a/src/lib-index/mail-index-write.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index-write.c	Thu Jul 30 17:52:41 2009 -0400
@@ -78,9 +78,13 @@ static int mail_index_recreate(struct ma
 	}
 	o_stream_destroy(&output);
 
-	if (ret == 0 && !index->fsync_disable && fdatasync(fd) < 0) {
-		mail_index_file_set_syscall_error(index, path, "fdatasync()");
-		ret = -1;
+	if (ret == 0 &&
+	    (index->flags & MAIL_INDEX_OPEN_FLAG_FSYNC_DISABLE) == 0) {
+		if (fdatasync(fd) < 0) {
+			mail_index_file_set_syscall_error(index, path,
+							  "fdatasync()");
+			ret = -1;
+		}
 	}
 
 	if (close(fd) < 0) {
@@ -88,7 +92,7 @@ static int mail_index_recreate(struct ma
 		ret = -1;
 	}
 
-	if (index->keep_backups)
+	if ((index->flags & MAIL_INDEX_OPEN_FLAG_KEEP_BACKUPS) != 0)
 		mail_index_create_backup(index);
 
 	if (ret == 0 && rename(path, index->filepath) < 0) {
@@ -241,7 +245,7 @@ void mail_index_write(struct mail_index 
 		ret = mail_index_write_map_over(index);
 		if (ret < 0)
 			mail_index_set_syscall_error(index, "pwrite_full()");
-		else if (index->nfs_flush) {
+		else if ((index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0) {
 			ret = fdatasync(index->fd);
 			if (ret < 0) {
 				mail_index_set_syscall_error(index,
diff -r cff3cb25a3e9 -r 126132cb1c19 src/lib-index/mail-index.c
--- a/src/lib-index/mail-index.c	Thu Jul 30 14:07:13 2009 -0400
+++ b/src/lib-index/mail-index.c	Thu Jul 30 17:52:41 2009 -0400
@@ -503,21 +503,15 @@ int mail_index_open(struct mail_index *i
 	index->nodiskspace = FALSE;
 	index->index_lock_timeout = FALSE;
 	index->log_locked = FALSE;
-	index->mmap_disable = (flags & MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE) != 0;
-	index->use_excl_dotlocks =
-		(flags & MAIL_INDEX_OPEN_FLAG_DOTLOCK_USE_EXCL) != 0;
-	index->fsync_disable =
-		(flags & MAIL_INDEX_OPEN_FLAG_FSYNC_DISABLE) != 0;
-	index->nfs_flush = (flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0;
+	index->flags = flags;
 	index->readonly = (flags & MAIL_INDEX_OPEN_FLAG_READONLY) != 0;
-	index->keep_backups = (flags & MAIL_INDEX_OPEN_FLAG_KEEP_BACKUPS) != 0;
-	index->never_in_memory =
-		(flags & MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY) != 0;
 	index->lock_method = lock_method;
 
-	if (index->nfs_flush && index->fsync_disable)
+	if ((flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0 &&
+	    (flags & MAIL_INDEX_OPEN_FLAG_FSYNC_DISABLE) != 0)
 		i_fatal("nfs flush requires fsync_disable=no");
-	if (index->nfs_flush && !index->mmap_disable)
+	if ((flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) != 0 &&
+	    (flags & MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE) == 0)
 		i_fatal("nfs flush requires mmap_disable=yes");
 
 	if ((ret = mail_index_open_files(index, flags)) <= 0) {
@@ -615,7 +609,8 @@ int mail_index_reopen_if_changed(struct 
 {
 	struct stat st1, st2;
 
-	i_assert(index->shared_lock_count == 0 || !index->nfs_flush);


More information about the dovecot-cvs mailing list