dovecot: Don't mmap() transaction log file if we're reading less...

dovecot at dovecot.org dovecot at dovecot.org
Tue Dec 4 14:48:59 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/8c80093fbab4
changeset: 6929:8c80093fbab4
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Dec 04 14:47:43 2007 +0200
description:
Don't mmap() transaction log file if we're reading less than a page.

diffstat:

1 file changed, 10 insertions(+), 2 deletions(-)
src/lib-index/mail-transaction-log-file.c |   12 ++++++++++--

diffs (36 lines):

diff -r fe777302d928 -r 8c80093fbab4 src/lib-index/mail-transaction-log-file.c
--- a/src/lib-index/mail-transaction-log-file.c	Tue Dec 04 14:39:32 2007 +0200
+++ b/src/lib-index/mail-transaction-log-file.c	Tue Dec 04 14:47:43 2007 +0200
@@ -1035,7 +1035,8 @@ mail_transaction_log_file_munmap(struct 
 }
 
 static int
-mail_transaction_log_file_map_mmap(struct mail_transaction_log_file *file)
+mail_transaction_log_file_map_mmap(struct mail_transaction_log_file *file,
+				   uoff_t start_offset)
 {
 	struct stat st;
 	int ret;
@@ -1069,6 +1070,13 @@ mail_transaction_log_file_map_mmap(struc
 
 	do {
 		mail_transaction_log_file_munmap(file);
+
+		if (file->last_size - start_offset < mmap_get_page_size()) {
+			/* just reading the file is probably faster */
+			return mail_transaction_log_file_read(file,
+							      start_offset,
+							      FALSE);
+		}
 
 		if (mail_transaction_log_file_mmap(file) < 0)
 			return -1;
@@ -1125,7 +1133,7 @@ int mail_transaction_log_file_map(struct
 	}
 
 	if (!index->mmap_disable)
-		ret = mail_transaction_log_file_map_mmap(file);
+		ret = mail_transaction_log_file_map_mmap(file, start_offset);
 	else {
 		mail_transaction_log_file_munmap(file);
 		ret = mail_transaction_log_file_read(file, start_offset, FALSE);


More information about the dovecot-cvs mailing list