2664 |
int len; |
int len; |
2665 |
static unsigned int ccs_serial; |
static unsigned int ccs_serial; |
2666 |
struct ccs_query_entry *ccs_query_entry = NULL; |
struct ccs_query_entry *ccs_query_entry = NULL; |
2667 |
|
bool quota_exceeded = false; |
2668 |
char *header; |
char *header; |
2669 |
if (!r->domain) |
if (!r->domain) |
2670 |
r->domain = ccs_current_domain(); |
r->domain = ccs_current_domain(); |
2694 |
INIT_LIST_HEAD(&ccs_query_entry->list); |
INIT_LIST_HEAD(&ccs_query_entry->list); |
2695 |
/***** CRITICAL SECTION START *****/ |
/***** CRITICAL SECTION START *****/ |
2696 |
spin_lock(&ccs_query_list_lock); |
spin_lock(&ccs_query_list_lock); |
2697 |
ccs_query_entry->serial = ccs_serial++; |
if (ccs_quota_for_query && ccs_query_memory_size + len + |
2698 |
|
sizeof(*ccs_query_entry) >= ccs_quota_for_query) { |
2699 |
|
quota_exceeded = true; |
2700 |
|
} else { |
2701 |
|
ccs_query_memory_size += len + sizeof(*ccs_query_entry); |
2702 |
|
ccs_query_entry->serial = ccs_serial++; |
2703 |
|
} |
2704 |
spin_unlock(&ccs_query_list_lock); |
spin_unlock(&ccs_query_list_lock); |
2705 |
/***** CRITICAL SECTION END *****/ |
/***** CRITICAL SECTION END *****/ |
2706 |
|
if (quota_exceeded) |
2707 |
|
goto out; |
2708 |
pos = snprintf(ccs_query_entry->query, len - 1, "Q%u-%hu\n%s", |
pos = snprintf(ccs_query_entry->query, len - 1, "Q%u-%hu\n%s", |
2709 |
ccs_query_entry->serial, r->retry, header); |
ccs_query_entry->serial, r->retry, header); |
2710 |
kfree(header); |
kfree(header); |
2731 |
/***** CRITICAL SECTION START *****/ |
/***** CRITICAL SECTION START *****/ |
2732 |
spin_lock(&ccs_query_list_lock); |
spin_lock(&ccs_query_list_lock); |
2733 |
list_del(&ccs_query_entry->list); |
list_del(&ccs_query_entry->list); |
2734 |
|
ccs_query_memory_size -= len + sizeof(*ccs_query_entry); |
2735 |
spin_unlock(&ccs_query_list_lock); |
spin_unlock(&ccs_query_list_lock); |
2736 |
/***** CRITICAL SECTION END *****/ |
/***** CRITICAL SECTION END *****/ |
2737 |
switch (ccs_query_entry->answer) { |
switch (ccs_query_entry->answer) { |