]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Limit mmap syscall errors in index to 1/s
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 21 Nov 2016 11:34:57 +0000 (13:34 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 21 Nov 2016 20:45:02 +0000 (22:45 +0200)
src/lib-index/mail-index-map-read.c
src/lib-index/mail-index-private.h

index 72270063f9bf700cbba5f799f403e40d7ca8548c..aa905ed72771ceac724922b4bfe24aeed4121a33 100644 (file)
@@ -8,6 +8,7 @@
 #include "mail-index-private.h"
 #include "mail-index-sync-private.h"
 #include "mail-transaction-log-private.h"
+#include "ioloop.h"
 
 static void mail_index_map_copy_hdr(struct mail_index_map *map,
                                    const struct mail_index_header *hdr)
@@ -47,8 +48,11 @@ static int mail_index_mmap(struct mail_index_map *map, uoff_t file_size)
                                  MAP_PRIVATE, index->fd, 0);
        if (rec_map->mmap_base == MAP_FAILED) {
                rec_map->mmap_base = NULL;
-               mail_index_set_syscall_error(index, t_strdup_printf(
-                       "mmap(size=%"PRIuUOFF_T")", file_size));
+               if (ioloop_time != index->last_mmap_error_time) {
+                       index->last_mmap_error_time = ioloop_time;
+                       mail_index_set_syscall_error(index, t_strdup_printf(
+                               "mmap(size=%"PRIuUOFF_T")", file_size));
+               }
                return -1;
        }
        rec_map->mmap_size = file_size;
index 8cfb4ffd8c7dffc7cf9890ce3b10ada9b4403c40..2a4055ba7a2b26e51c004181b4156de067c152f5 100644 (file)
@@ -183,6 +183,9 @@ struct mail_index {
        int fd;
 
        struct mail_index_map *map;
+
+       time_t last_mmap_error_time;
+
        uint32_t indexid;
        unsigned int inconsistency_id;