From: Timo Sirainen Date: Sun, 4 Jun 2017 10:06:06 +0000 (+0300) Subject: quota: Fix quota_vsizes=yes to work with all backends X-Git-Tag: 2.3.0.rc1~1472 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=27569c07b5df5c4f079ca6cd329a5abb1b770d05;p=thirdparty%2Fdovecot%2Fcore.git quota: Fix quota_vsizes=yes to work with all backends --- diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index fdc2869e26..830a79b78f 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -1235,6 +1235,15 @@ void quota_transaction_rollback(struct quota_transaction_context **_ctx) i_free(ctx); } +static int quota_get_mail_size(struct quota_transaction_context *ctx, + struct mail *mail, uoff_t *size_r) +{ + if (ctx->quota->set->vsizes) + return mail_get_virtual_size(mail, size_r); + else + return mail_get_physical_size(mail, size_r); +} + enum quota_alloc_result quota_try_alloc(struct quota_transaction_context *ctx, struct mail *mail) { @@ -1246,7 +1255,7 @@ enum quota_alloc_result quota_try_alloc(struct quota_transaction_context *ctx, if (ctx->no_quota_updates) return QUOTA_ALLOC_RESULT_OK; - if (mail_get_physical_size(mail, &size) < 0) { + if (quota_get_mail_size(ctx, mail, &size) < 0) { enum mail_error error; const char *errstr = mailbox_get_last_internal_error(mail->box, &error); @@ -1333,7 +1342,7 @@ void quota_alloc(struct quota_transaction_context *ctx, struct mail *mail) if (ctx->auto_updating) return; - if (mail_get_physical_size(mail, &size) == 0) + if (quota_get_mail_size(ctx, mail, &size) == 0) ctx->bytes_used += size; ctx->bytes_ceil = ctx->bytes_ceil2; @@ -1346,7 +1355,7 @@ void quota_free(struct quota_transaction_context *ctx, struct mail *mail) if (ctx->auto_updating) return; - if (mail_get_physical_size(mail, &size) < 0) + if (quota_get_mail_size(ctx, mail, &size) < 0) quota_recalculate(ctx, QUOTA_RECALCULATE_MISSING_FREES); else quota_free_bytes(ctx, size);