* only set memory limitation to memory.memsw.limit_in_bytes
* because almost memcg does't have a limitation about swap usage
*/
- if (prev >= limit) {
+ if (prev > limit) {
cgroup_write_node_uint32(dir, MEMCG_LIMIT_PATH, limit);
cgroup_write_node_uint32(dir, MEMCG_SWAP_LIMIT_PATH, limit);
- } else {
+ } else if (prev < limit) {
cgroup_write_node_uint32(dir, MEMCG_SWAP_LIMIT_PATH, limit);
cgroup_write_node_uint32(dir, MEMCG_LIMIT_PATH, limit);
+ } else {
+ cgroup_write_node_uint32(dir, MEMCG_SWAP_LIMIT_PATH, limit);
}
return;
case MEM_LIMIT_OOM:
* Otherwise, MEM_LIMIT_NONE and MEM_LIMIT_OOM will be same.
*/
cgroup_write_node_uint32(dir, MEMCG_OOM_CONTROL_PATH, 1);
- if (prev >= limit) {
+ if (prev > limit) {
cgroup_write_node_uint32(dir, MEMCG_LIMIT_PATH, limit);
cgroup_write_node_uint32(dir, MEMCG_SWAP_LIMIT_PATH, limit);
- } else {
+ } else if (prev < limit) {
cgroup_write_node_uint32(dir, MEMCG_SWAP_LIMIT_PATH, limit);
cgroup_write_node_uint32(dir, MEMCG_LIMIT_PATH, limit);
+ } else {
+ cgroup_write_node_uint32(dir, MEMCG_SWAP_LIMIT_PATH, limit);
}
- snprintf(buf, sizeof(buf), "%d", SIGTRAP);
break;
case MEM_LIMIT_TRHESHOLD:
snprintf(buf, sizeof(buf), "%d", limit);
return;
}
+ if (mle) {
+ mle->threshold = limit;
+ return;
+ }
+
fd = memcg_set_eventfd(dir, registerpath, buf);
if (fd) {
mle = calloc(1, sizeof(struct memory_limit_event));