Skip to content
  • Tejun Heo's avatar
    cgroup_freezer: don't stall transition to FROZEN for PF_NOFREEZE or PF_FREEZER_SKIP tasks · 3c426d5e
    Tejun Heo authored
    
    
    cgroup_freezer doesn't transition from FREEZING to FROZEN if the
    cgroup contains PF_NOFREEZE tasks or tasks sleeping with
    PF_FREEZER_SKIP set.
    
    Only kernel tasks can be non-freezable (PF_NOFREEZE) and there's
    nothing cgroup_freezer or userland can do about or to it.  It's
    pointless to stall the transition for PF_NOFREEZE tasks.
    
    PF_FREEZER_SKIP indicates that the task can be skipped when
    determining whether frozen state is reached.  A task with
    PF_FREEZER_SKIP is guaranteed to perform try_to_freeze() after it
    wakes up and can be considered frozen much like stopped or traced
    tasks.  Note that a vfork parent uses PF_FREEZER_SKIP while waiting
    for the child.
    
    This updates update_if_frozen() such that it only considers freezable
    tasks and treats %true freezer_should_skip() tasks as frozen.
    
    This allows cgroups w/ kthreads and vfork parents successfully reach
    FROZEN state.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Rafael J. Wysocki <rjw@sisk.pl>
    3c426d5e