Mercurial > dovecot > original-hg > dovecot-1.2
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);