It can only be removed by an explicit header update.
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);
}
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);
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 {