|
@@ -181,7 +181,7 @@ struct mem_cgroup_threshold {
|
|
|
|
|
|
/* For threshold */
|
|
|
struct mem_cgroup_threshold_ary {
|
|
|
- /* An array index points to threshold just below usage. */
|
|
|
+ /* An array index points to threshold just below or equal to usage. */
|
|
|
int current_threshold;
|
|
|
/* Size of entries[] */
|
|
|
unsigned int size;
|
|
@@ -4280,7 +4280,7 @@ static void __mem_cgroup_threshold(struct mem_cgroup *memcg, bool swap)
|
|
|
usage = mem_cgroup_usage(memcg, swap);
|
|
|
|
|
|
/*
|
|
|
- * current_threshold points to threshold just below usage.
|
|
|
+ * current_threshold points to threshold just below or equal to usage.
|
|
|
* If it's not true, a threshold was crossed after last
|
|
|
* call of __mem_cgroup_threshold().
|
|
|
*/
|
|
@@ -4406,14 +4406,15 @@ static int mem_cgroup_usage_register_event(struct cgroup *cgrp,
|
|
|
/* Find current threshold */
|
|
|
new->current_threshold = -1;
|
|
|
for (i = 0; i < size; i++) {
|
|
|
- if (new->entries[i].threshold < usage) {
|
|
|
+ if (new->entries[i].threshold <= usage) {
|
|
|
/*
|
|
|
* new->current_threshold will not be used until
|
|
|
* rcu_assign_pointer(), so it's safe to increment
|
|
|
* it here.
|
|
|
*/
|
|
|
++new->current_threshold;
|
|
|
- }
|
|
|
+ } else
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
/* Free old spare buffer and save old primary buffer as spare */
|
|
@@ -4482,7 +4483,7 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
|
|
|
continue;
|
|
|
|
|
|
new->entries[j] = thresholds->primary->entries[i];
|
|
|
- if (new->entries[j].threshold < usage) {
|
|
|
+ if (new->entries[j].threshold <= usage) {
|
|
|
/*
|
|
|
* new->current_threshold will not be used
|
|
|
* until rcu_assign_pointer(), so it's safe to increment
|