Kairui Song <ryncsn@xxxxxxxxx> writes: > From: Kairui Song <kasong@xxxxxxxxxxx> > > When a process which previously swapped some memory was moved to > another cgroup, and the cgroup it previous in is dead, then swapped in > pages will be leaked into rootcg. Previous commits fixed the bug for > no readahead path, this commit fix the same issue for readahead path. > > This can be easily reproduced by: > - Setup a SSD or HDD swap. > - Create memory cgroup A, B and C. > - Spawn process P1 in cgroup A and make it swap out some pages. > - Move process P1 to memory cgroup B. > - Destroy cgroup A. > - Do a swapoff in cgroup C > - Swapped in pages is accounted into cgroup C. > > This patch will fix it make the swapped in pages accounted in cgroup B. Accroding to "Memory Ownership" section of Documentation/admin-guide/cgroup-v2.rst, " A memory area is charged to the cgroup which instantiated it and stays charged to the cgroup until the area is released. Migrating a process to a different cgroup doesn't move the memory usages that it instantiated while in the previous cgroup to the new cgroup. " Because we don't move the charge when we move a task from one cgroup to another. It's controversial which cgroup should be charged to. According to the above document, it's acceptable to charge to the cgroup C (cgroup where swapoff happens). -- Best Regards, Huang, Ying