uoff_t size, bool *too_large_r)
{
int ret, i;
+ uint64_t size_needed = 0;
+ unsigned int count_needed = 0;
for (i = 0; ; i++) {
ret = trash_next_quota_test_alloc(ctx, size, too_large_r);
break;
}
+ if (ctx->bytes_ceil != (uint64_t)-1 &&
+ ctx->bytes_ceil < size + ctx->bytes_over)
+ size_needed = size + ctx->bytes_over - ctx->bytes_ceil;
+ if (ctx->count_ceil != (uint64_t)-1 &&
+ ctx->count_ceil < 1 + ctx->count_over)
+ count_needed = 1 + ctx->count_over - ctx->count_ceil;
+
/* not enough space. try deleting some from mailbox. */
- ret = trash_try_clean_mails(ctx, size + ctx->bytes_over,
- 1 + ctx->count_over);
+ ret = trash_try_clean_mails(ctx, size_needed, count_needed);
if (ret <= 0)
return 0;
}