• T
    cgroup: kill CSS_REMOVED · e9316080
    Tejun Heo 提交于
    CSS_REMOVED is one of the several contortions which were necessary to
    support css reference draining on cgroup removal.  All css->refcnts
    which need draining should be deactivated and verified to equal zero
    atomically w.r.t. css_tryget().  If any one isn't zero, all refcnts
    needed to be re-activated and css_tryget() shouldn't fail in the
    process.
    
    This was achieved by letting css_tryget() busy-loop until either the
    refcnt is reactivated (failed removal attempt) or CSS_REMOVED is set
    (committing to removal).
    
    Now that css refcnt draining is no longer used, there's no need for
    atomic rollback mechanism.  css_tryget() simply can look at the
    reference count and fail if it's deactivated - it's never getting
    re-activated.
    
    This patch removes CSS_REMOVED and updates __css_tryget() to fail if
    the refcnt is deactivated.  As deactivation and removal are a single
    step now, they no longer need to be protected against css_tryget()
    happening from irq context.  Remove local_irq_disable/enable() from
    cgroup_rmdir().
    
    Note that this removes css_is_removed() whose only user is VM_BUG_ON()
    in memcontrol.c.  We can replace it with a check on the refcnt but
    given that the only use case is a debug assert, I think it's better to
    simply unexport it.
    
    v2: Comment updated and explanation on local_irq_disable/enable()
        added per Michal Hocko.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Reviewed-by: NMichal Hocko <mhocko@suse.cz>
    Reviewed-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Acked-by: NLi Zefan <lizefan@huawei.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Balbir Singh <bsingharora@gmail.com>
    e9316080
cgroup.h 18.6 KB