]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
quota: Make quota_root_is_over() suitable for calculations involving moving/replacing...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Tue, 13 Nov 2018 21:03:46 +0000 (22:03 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 26 Feb 2025 10:45:00 +0000 (10:45 +0000)
src/plugins/quota/quota-private.h
src/plugins/quota/quota-util.c
src/plugins/quota/quota.c

index 9f7a857556eff1d6d8e88161b4360f770a815452..40b57aafdc159bc662ac32c111524606399664a9 100644 (file)
@@ -190,6 +190,7 @@ bool quota_transaction_is_over(struct quota_transaction_context *ctx, uoff_t siz
 bool quota_root_is_over(struct quota_transaction_context *ctx,
                        struct quota_transaction_root_context *root,
                        uoff_t count_alloc, uoff_t bytes_alloc,
+                       uoff_t count_expunged, uoff_t bytes_expunged,
                        uoff_t *count_overrun_r, uoff_t *bytes_overrun_r);
 
 void quota_transaction_root_expunged(
index 46dc0825c390bb8166befa7f7c147c8140b0ead3..5f9e311c756c578a3a9d2759416b82834c45489e 100644 (file)
@@ -163,6 +163,7 @@ bool quota_transaction_is_over(struct quota_transaction_context *ctx,
 bool quota_root_is_over(struct quota_transaction_context *ctx,
                        struct quota_transaction_root_context *root,
                        uoff_t count_alloc, uoff_t bytes_alloc,
+                       uoff_t count_expunged, uoff_t bytes_expunged,
                        uoff_t *count_overrun_r, uoff_t *bytes_overrun_r)
 {
        int64_t count_used = ctx->count_used;
@@ -173,6 +174,8 @@ bool quota_root_is_over(struct quota_transaction_context *ctx,
 
        quota_used_apply_expunged(&count_used, root->count_expunged);
        quota_used_apply_expunged(&bytes_used, root->bytes_expunged);
+       quota_used_apply_expunged(&count_used, count_expunged);
+       quota_used_apply_expunged(&bytes_used, bytes_expunged);
 
        return (quota_is_over(count_alloc, count_used,
                              root->count_ceil, root->count_over,
index 219d6e247387ab84cbcc82f9809d8ae1f37a76c2..94b4186afc06fd27167a8a5e5b39b1b2917116a9 100644 (file)
@@ -1247,7 +1247,7 @@ quota_default_test_alloc(struct quota_transaction_context *ctx, uoff_t size,
                }
 
                i_zero(&overrun);
-               if (quota_root_is_over(ctx, &ctx->roots[i], 1, size,
+               if (quota_root_is_over(ctx, &ctx->roots[i], 1, size, 0, 0,
                                       &overrun.resource.count,
                                       &overrun.resource.bytes)) {
                        overrun.root = roots[i];