mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-24 02:20:45 +07:00
cgroup: immediately remove all cgroups which run empty
Some controllers have scaling problems when many empty cgroups exist. Hence, as soon as we get a notification that a cgroup is empty, delete it. This is also nice to keep the systemd-cgls output short.
This commit is contained in:
parent
263653e103
commit
353fa6a21a
12
src/cgroup.c
12
src/cgroup.c
@ -363,7 +363,8 @@ int cgroup_notify_empty(Manager *m, const char *group) {
|
||||
assert(m);
|
||||
assert(group);
|
||||
|
||||
if (!(l = hashmap_get(m->cgroup_bondings, group)))
|
||||
l = hashmap_get(m->cgroup_bondings, group);
|
||||
if (!l)
|
||||
return 0;
|
||||
|
||||
LIST_FOREACH(by_path, b, l) {
|
||||
@ -372,7 +373,8 @@ int cgroup_notify_empty(Manager *m, const char *group) {
|
||||
if (!b->unit)
|
||||
continue;
|
||||
|
||||
if ((t = cgroup_bonding_is_empty_list(b)) < 0) {
|
||||
t = cgroup_bonding_is_empty_list(b);
|
||||
if (t < 0) {
|
||||
|
||||
/* If we don't know, we don't know */
|
||||
if (t != -EAGAIN)
|
||||
@ -381,9 +383,13 @@ int cgroup_notify_empty(Manager *m, const char *group) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (t > 0)
|
||||
if (t > 0) {
|
||||
/* If it is empty, let's delete it */
|
||||
cgroup_bonding_trim_list(b->unit->meta.cgroup_bondings, true);
|
||||
|
||||
if (UNIT_VTABLE(b->unit)->cgroup_notify_empty)
|
||||
UNIT_VTABLE(b->unit)->cgroup_notify_empty(b->unit);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user