Commits
Michal Hocko authored and Konstantin Khorenko committed 290eb4a984c
ms/vmpressure: make sure there are no events queued after memcg is offlined vmpressure is called synchronously from reclaim where the target_memcg is guaranteed to be alive but the eventfd is signaled from the work queue context. This means that memcg (along with vmpressure structure which is embedded into it) might go away while the work item is pending which would result in use-after-release bug. We have two possible ways how to fix this. Either vmpressure pins memcg before it schedules vmpr->work and unpin it in vmpressure_work_fn or explicitely flush the work item from the css_offline context (as suggested by Tejun). This patch implements the later one and it introduces vmpressure_cleanup which flushes the vmpressure work queue item item. It hooks into mem_cgroup_css_offline after the memcg itself is cleaned up. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Michal Hocko <mhocko@suse.cz> Reported-by: Tejun Heo <tj@kernel.org> Cc: Anton Vorontsov <anton.vorontsov@linaro.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Li Zefan <lizefan@huawei.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> (cherry picked from commit 33cb876e947b9ddda8dca3fb99234b743a597ef9) Backport notes: vmpressure_cleanup() has been moved from mem_cgroup_css_offline() to mem_cgroup_css_free() because - in current mainstream it's already there after global cleanup/rework - it's generally safer. 100% cover case when the work is scheduled after cgroup is offlined (even if it's caused by another bug). https://jira.sw.ru/browse/PSBM-93884 Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com> Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>