• Tejun Heo's avatar
    device_cgroup: simplify cgroup tree walk in propagate_exception() · d591fb56
    Tejun Heo authored
    During a config change, propagate_exception() needs to traverse the
    subtree to update config on the subtree.  Because such config updates
    need to allocate memory, it couldn't directly use
    cgroup_for_each_descendant_pre() which required the whole iteration to
    be contained in a single RCU read critical section.  To work around
    the limitation, propagate_exception() built a linked list of
    descendant cgroups while read-locking RCU and then walked the list
    afterwards, which is safe as the whole iteration is protected by
    devcgroup_mutex.  This works but is cumbersome.
    With the recent updates, cgroup iterators now allow dropping RCU read
    lock while iteration is in progress making this workaround no longer
    necessary.  This patch replaces dev_cgroup->propagate_pending list and
    get_online_devcg() with direct cgroup_for_each_descendant_pre() walk.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Aristeu Rozanski <aris@redhat.com>
    Acked-by: default avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
    Reviewed-by: default avatarMichal Hocko <mhocko@suse.cz>
device_cgroup.c 18.1 KB