From: Timo Sirainen Date: Mon, 21 Apr 2003 15:41:19 +0000 (+0300) Subject: fsync() saved mails X-Git-Tag: 1.1.alpha1~4735 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad8a4ef24dee1b716179fd92af5a62d30680b0dd;p=thirdparty%2Fdovecot%2Fcore.git fsync() saved mails --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/maildir/maildir-save.c b/src/lib-storage/index/maildir/maildir-save.c index 7cdbb53e24..a9fcdf28ea 100644 --- a/src/lib-storage/index/maildir/maildir-save.c +++ b/src/lib-storage/index/maildir/maildir-save.c @@ -53,8 +53,18 @@ maildir_read_into_tmp(struct index_mailbox *ibox, const char *dir, fname = NULL; o_stream_unref(output); - if (close(fd) < 0) + /* FIXME: when saving multiple messages, we could get better + performance if we left the fd open and fsync()ed it later */ + if (fsync(fd) < 0) { + mail_storage_set_critical(ibox->box.storage, + "fsync() failed for %s: %m", path); fname = NULL; + } + if (close(fd) < 0) { + mail_storage_set_critical(ibox->box.storage, + "close() failed for %s: %m", path); + fname = NULL; + } if (fname == NULL) (void)unlink(path); diff --git a/src/lib-storage/index/mbox/mbox-save.c b/src/lib-storage/index/mbox/mbox-save.c index a7990e342d..f1a1494134 100644 --- a/src/lib-storage/index/mbox/mbox-save.c +++ b/src/lib-storage/index/mbox/mbox-save.c @@ -357,6 +357,11 @@ int mbox_storage_save_deinit(struct mail_save_context *ctx, int rollback) syscall_error(ctx, "ftruncate()"); failed = TRUE; } + } else { + if (fdatasync(ctx->ibox->index->mbox_fd) < 0) { + syscall_error(ctx, "fsync()"); + failed = TRUE; + } } i_free(ctx);