changeset 6929:8c80093fbab4 HEAD

Don't mmap() transaction log file if we're reading less than a page.
author Timo Sirainen <tss@iki.fi>
date Tue, 04 Dec 2007 14:47:43 +0200
parents fe777302d928
children 48ddc0c4036c
files src/lib-index/mail-transaction-log-file.c
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
 }
 
 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;
@@ -1070,6 +1071,13 @@
 	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;
 		if ((ret = mail_transaction_log_file_sync(file)) < 0)
@@ -1125,7 +1133,7 @@
 	}
 
 	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);