• Tejun Heo's avatar
    memcg: add RCU locking around css_for_each_descendant_pre() in memcg_offline_kmem() · 3a06bb78
    Tejun Heo authored
    memcg_offline_kmem() may be called from memcg_free_kmem() after a css
    init failure.  memcg_free_kmem() is a ->css_free callback which is
    called without cgroup_mutex and memcg_offline_kmem() ends up using
    css_for_each_descendant_pre() without any locking.  Fix it by adding rcu
    read locking around it.
    
        mkdir: cannot create directory `65530': No space left on device
        ===============================
        [ INFO: suspicious RCU usage. ]
        4.6.0-work+ #321 Not tainted
        -------------------------------
        kernel/cgroup.c:4008 cgroup_mutex or RCU read lock required!
         [  527.243970] other info that might help us debug this:
         [  527.244715]
        rcu_scheduler_active = 1, debug_locks = 0
        2 locks held by kworker/0:5/1664:
         #0:  ("cgroup_destroy"){.+.+..}, at: [<ffffffff81060ab5>] process_one_work+0x165/0x4a0
         #1:  ((&css->destroy_work)#3){+.+...}, at: [<ffffffff81060ab5>] process_one_work+0x165/0x4a0
         [  527.248098] stack backtrace:
        CPU: 0 PID: 1664 Comm: kworker/0:5 Not tainted 4.6.0-work+ #321
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.1-1.fc24 04/01/2014
        Workqueue: cgroup_destroy css_free_work_fn
        Call Trace:
          dump_stack+0x68/0xa1
          lockdep_rcu_suspicious+0xd7/0x110
          css_next_descendant_pre+0x7d/0xb0
          memcg_offline_kmem.part.44+0x4a/0xc0
          mem_cgroup_css_free+0x1ec/0x200
          css_free_work_fn+0x49/0x5e0
          process_one_work+0x1c5/0x4a0
          worker_thread+0x49/0x490
          kthread+0xea/0x100
          ret_from_fork+0x1f/0x40
    
    Link: http://lkml.kernel.org/r/20160526203018.GG23194@mtj.duckdns.org
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarVladimir Davydov <vdavydov@virtuozzo.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: <stable@vger.kernel.org>	[4.5+]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3a06bb78