• Tejun Heo's avatar
    cgroup: introduce CSS_RELEASED and reduce css iteration fallback window · de3f0341
    Tejun Heo authored
    css iterations allow the caller to drop RCU read lock.  As long as the
    caller keeps the current position accessible, it can simply re-grab
    RCU read lock later and continue iteration.  This is achieved by using
    CGRP_DEAD to detect whether the current positions next pointer is safe
    to dereference and if not re-iterate from the beginning to the next
    position using ->serial_nr.
    
    CGRP_DEAD is used as the marker to invalidate the next pointer and the
    only requirement is that the marker is set before the next sibling
    starts its RCU grace period.  Because CGRP_DEAD is set at the end of
    cgroup_destroy_locked() but the cgroup is unlinked when the reference
    count reaches zero, we currently have a rather large window where this
    fallback re-iteration logic can be triggered.
    
    This patch introduces CSS_RELEASED which is set when a css is unlinked
    from its sibling list.  This still keeps the re-iteration logic
    working while drastically reducing the window of its activation.
    While at it, rewrite the comment in css_next_child() to reflect the
    new flag and better explain the synchronization.
    
    This will also enable iterating csses directly instead of through
    cgroups.
    
    v2: CSS_RELEASED now assigned to 1 << 2 as 1 << 0 is used by
        CSS_NO_REF.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarLi Zefan <lizefan@huawei.com>
    de3f0341
cgroup.h 27.8 KB