]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
sdbox: Rebuild index after it's been fsck'd
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 24 Nov 2016 16:12:00 +0000 (18:12 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 3 Dec 2016 16:45:02 +0000 (18:45 +0200)
src/lib-storage/index/dbox-single/sdbox-sync-rebuild.c
src/lib-storage/index/dbox-single/sdbox-sync.c

index da6c5fc57b1d1f918ea2bfd21c9cf800507f401d..65ba9d1446112538cb7d98efe0d28c4fc87bbbe7 100644 (file)
@@ -216,8 +216,10 @@ int sdbox_sync_index_rebuild(struct sdbox_mailbox *mbox, bool force)
 
        if (ret < 0)
                mail_index_transaction_rollback(&trans);
-       else
+       else {
+               mail_index_unset_fscked(trans);
                ret = mail_index_transaction_commit(&trans);
+       }
        mail_index_view_close(&view);
        mbox->corrupted_rebuild_count = 0;
        return ret;
index be0203f62b80f97c66a55b3ca6291aa6f8cf1e00..4f7d453fd93da764a4e81b9c2e764183c70e0744 100644 (file)
@@ -191,6 +191,8 @@ int sdbox_sync_begin(struct sdbox_mailbox *mbox, enum sdbox_sync_flags flags,
                     struct sdbox_sync_context **ctx_r)
 {
        struct mail_storage *storage = mbox->box.storage;
+       const struct mail_index_header *hdr =
+               mail_index_get_header(mbox->box.view);
        struct sdbox_sync_context *ctx;
        enum mail_index_sync_flags sync_flags;
        unsigned int i;
@@ -199,6 +201,7 @@ int sdbox_sync_begin(struct sdbox_mailbox *mbox, enum sdbox_sync_flags flags,
 
        force_rebuild = (flags & SDBOX_SYNC_FLAG_FORCE_REBUILD) != 0;
        rebuild = force_rebuild ||
+               (hdr->flags & MAIL_INDEX_HDR_FLAG_FSCKD) != 0 ||
                mbox->corrupted_rebuild_count != 0 ||
                sdbox_refresh_header(mbox, TRUE, FALSE) < 0;