• H
    memcg: fix mem_cgroup_move_lists locking · 2680eed7
    Hugh Dickins 提交于
    Ever since the VM_BUG_ON(page_get_page_cgroup(page)) (now Bad page state) went
    into page freeing, I've hit it from time to time in testing on some machines,
    sometimes only after many days.  Recently found a machine which could usually
    produce it within a few hours, which got me there at last.
    
    The culprit is mem_cgroup_move_lists, whose locking is inadequate; and the
    arrangement of structures was such that you got page_cgroups from the lru list
    neatly put on to SLUB's freelist.  Kamezawa-san identified the same hole
    independently.
    
    The main problem was that it was missing the lock_page_cgroup it needs to
    safely page_get_page_cgroup; but it's tricky to go beyond that too, and I
    couldn't do it with SLAB_DESTROY_BY_RCU as I'd expected.  See the code for
    comments on the constraints.
    
    This patch immediately gets replaced by a simpler one from Hirokazu-san; but
    is it just foolish pride that tells me to put this one on record, in case we
    need to come back to it later?
    Signed-off-by: NHugh Dickins <hugh@veritas.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
    Acked-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Hirokazu Takahashi <taka@valinux.co.jp>
    Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
    Cc: Paul Menage <menage@google.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    2680eed7
memcontrol.c 28.4 KB