static void quota_set_storage_error(struct quota_transaction_context *qt,
struct mail_storage *storage,
- enum quota_alloc_result res)
+ enum quota_alloc_result res,
+ const char *internal_err)
{
const char *errstr = quota_alloc_result_errstr(res, qt);
switch (res) {
mail_storage_set_error(storage, MAIL_ERROR_NOQUOTA, errstr);
break;
case QUOTA_ALLOC_RESULT_TEMPFAIL:
- mail_storage_set_internal_error(storage);
+ mail_storage_set_critical(storage, "quota: %s", internal_err);
break;
case QUOTA_ALLOC_RESULT_OK:
i_unreached();
const char *error;
enum quota_alloc_result qret = quota_test_alloc(qt, 0, &error);
if (qret != QUOTA_ALLOC_RESULT_OK) {
- if (qret == QUOTA_ALLOC_RESULT_TEMPFAIL)
- i_error("quota check failed: %s", error);
- quota_set_storage_error(qt, box->storage, qret);
+ quota_set_storage_error(qt, box->storage, qret, error);
ret = -1;
}
quota_transaction_rollback(&qt);
i_error("quota check failed: %s", error);
return 0;
default:
- quota_set_storage_error(qt, t->box->storage, ret);
+ quota_set_storage_error(qt, t->box->storage, ret, error);
return -1;
}
}
i_error("quota allocation failed: %s", error);
break;
default:
- quota_set_storage_error(qt, t->box->storage, qret);
+ quota_set_storage_error(qt, t->box->storage, qret, error);
return -1;
}
}