From ead5dced72859c1fb1579cf790a305b2ce697738 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 24 Nov 2016 15:49:15 +0200 Subject: [PATCH] lib-index: fsck now adds MAIL_INDEX_HDR_FLAG_FSCKD to header. It can only be removed by an explicit header update. --- src/lib-index/mail-index-fsck.c | 1 + src/lib-index/mail-index-sync-update.c | 2 ++ src/lib-index/mail-index.h | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib-index/mail-index-fsck.c b/src/lib-index/mail-index-fsck.c index 330b8b934d..14afd4828e 100644 --- a/src/lib-index/mail-index-fsck.c +++ b/src/lib-index/mail-index-fsck.c @@ -433,6 +433,7 @@ mail_index_fsck_map(struct mail_index *index, struct mail_index_map *map) mail_index_fsck_extensions(index, map, &hdr); mail_index_fsck_records(index, map, &hdr); + hdr.flags |= MAIL_INDEX_HDR_FLAG_FSCKD; map->hdr = hdr; i_assert(map->hdr_copy_buf->used == map->hdr.header_size); } diff --git a/src/lib-index/mail-index-sync-update.c b/src/lib-index/mail-index-sync-update.c index 40cb4a9bea..3a7a80c8f0 100644 --- a/src/lib-index/mail-index-sync-update.c +++ b/src/lib-index/mail-index-sync-update.c @@ -1012,6 +1012,8 @@ int mail_index_sync_map(struct mail_index_map **_map, mail_transaction_log_view_get_prev_pos(view->log_view, &prev_seq, &prev_offset); map = mail_index_map_alloc(index); + if ((index->map->hdr.flags & MAIL_INDEX_HDR_FLAG_FSCKD) != 0) + map->hdr.flags |= MAIL_INDEX_HDR_FLAG_FSCKD; map->hdr.log_file_seq = prev_seq; map->hdr.log_file_tail_offset = 0; mail_index_sync_replace_map(&sync_map_ctx, map); diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index b0221b55d4..82b38c9d6b 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -46,7 +46,10 @@ enum mail_index_header_compat_flags { enum mail_index_header_flag { /* Index file is corrupted, reopen or recreate it. */ MAIL_INDEX_HDR_FLAG_CORRUPTED = 0x0001, - MAIL_INDEX_HDR_FLAG_HAVE_DIRTY = 0x0002 + MAIL_INDEX_HDR_FLAG_HAVE_DIRTY = 0x0002, + /* Index has been fsck'd. The caller may want to resync the index + to make sure it's valid and drop this flag. */ + MAIL_INDEX_HDR_FLAG_FSCKD = 0x0004, }; enum mail_index_mail_flags {