• Tejun Heo's avatar
    memcg: implement mem_cgroup_css_from_page() · ad7fa852
    Tejun Heo authored
    Implement mem_cgroup_css_from_page() which returns the
    cgroup_subsys_state of the memcg associated with a given page on the
    default hierarchy.  This will be used by cgroup writeback support.
    
    This function assumes that page->mem_cgroup association doesn't change
    until the page is released, which is true on the default hierarchy as
    long as replace_page_cache_page() is not used.  As the only user of
    replace_page_cache_page() is FUSE which won't support cgroup writeback
    for the time being, this works for now, and replace_page_cache_page()
    will soon be updated so that the invariant actually holds.
    
    Note that the RCU protected page->mem_cgroup access is consistent with
    other usages across memcg but ultimately incorrect.  These unlocked
    accesses are missing required barriers.  page->mem_cgroup should be
    made an RCU pointer and updated and accessed using RCU operations.
    
    v4: Instead of triggering WARN, return the root css on the traditional
        hierarchies.  This makes the function a lot easier to deal with
        especially as there's no light way to synchronize against
        hierarchy rebinding.
    
    v3: s/mem_cgroup_migrate()/mem_cgroup_css_from_page()/
    
    v2: Trigger WARN if the function is used on the traditional
        hierarchies and add comment about the assumed invariant.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    ad7fa852
memcontrol.c 151 KB