[Dovecot] Debugging msync() failed errors
From today's maillog:
maillog:Dec 28 09:29:40 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/.projects.job591/dovecot.index: Invalid argument maillog:Dec 28 09:30:21 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument maillog:Dec 28 09:30:22 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument maillog:Dec 28 09:30:28 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument maillog:Dec 28 09:44:46 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/.projects.job591/dovecot.index: Invalid argument maillog:Dec 28 09:44:47 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument maillog:Dec 28 09:49:10 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument
Can anyone slip me some advice on how to properly go about debugging this problem? Is there a way to check the .index file? Can anyone make an educated guess as to what section of code is the likely culprit?
Thanks,
Doug
On Tue, 2004-12-28 at 10:05 -0800, Doug Luce wrote:
From today's maillog:
maillog:Dec 28 09:49:10 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument
Can anyone slip me some advice on how to properly go about debugging this problem? Is there a way to check the .index file? Can anyone make an educated guess as to what section of code is the likely culprit?
There are only two msync() calls in the code. Try what it says with this patch: Index: src/lib-index/mail-index-sync-update.c =================================================================== RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync-update.c,v retrieving revision 1.78 diff -u -r1.78 mail-index-sync-update.c --- src/lib-index/mail-index-sync-update.c 26 Dec 2004 09:12:40 -0000 1.78 +++ src/lib-index/mail-index-sync-update.c 6 Jan 2005 19:23:55 -0000 @@ -675,6 +675,14 @@ PTR_OFFSET(map->hdr_base, sizeof(map->hdr)), map->hdr.header_size - sizeof(map->hdr)); if (msync(map->mmap_base, map->mmap_used_size, MS_SYNC) < 0) { + void *p; + i_error("msync(%p, %"PRIuSIZE_T") failed, checking..", + map->mmap_base, map->mmap_used_size); + p = i_malloc(map->mmap_used_size); + memcpy(p, map->mmap_base, map->mmap_used_size); + i_free(p); + i_error("we didn't crash, the address range is ok."); + mail_index_set_syscall_error(index, "msync()"); ret = -1; } Index: src/lib-index/mail-index.c =================================================================== RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index.c,v retrieving revision 1.184 diff -u -r1.184 mail-index.c --- src/lib-index/mail-index.c 26 Dec 2004 09:12:40 -0000 1.184 +++ src/lib-index/mail-index.c 6 Jan 2005 19:23:56 -0000 @@ -1057,8 +1057,12 @@ if (!MAIL_INDEX_MAP_IS_IN_MEMORY(index->map)) { memcpy(index->map->mmap_base, hdr, hdr_size); - if (msync(index->map->mmap_base, hdr_size, MS_SYNC) < 0) + if (msync(index->map->mmap_base, hdr_size, MS_SYNC) < 0) { + i_error("header: msync(%p, %"PRIuSIZE_T") failed, mmap_size=%"PRIuSIZE_T, + index->map->mmap_base, hdr_size, + index->map->mmap_size); return mail_index_set_syscall_error(index, "msync()"); + } } else { if (pwrite_full(index->fd, hdr, hdr_size, 0) < 0) { mail_index_set_syscall_error(index, "pwrite_full()");
participants (2)
-
Doug Luce
-
Timo Sirainen