• Michal Hocko's avatar
    vmpressure: make sure there are no events queued after memcg is offlined · 33cb876e
    Michal Hocko authored
    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: default avatarMichal Hocko <mhocko@suse.cz>
    Reported-by: default avatarTejun 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: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    33cb876e
vmpressure.c 11.8 KB