[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-cgroups
Subject:    Re: [PATCH v2 4/4] mm/slub: Fix sysfs shrink circular locking dependency
From:       Qian Cai <cai () lca ! pw>
Date:       2020-04-29 2:52:48
Message-ID: 0310F66F-0ECB-43BF-B86F-3BDB74F51B06 () lca ! pw
[Download RAW message or body]



> On Apr 28, 2020, at 10:06 AM, Waiman Long <longman@redhat.com> wrote:
> 
> On 4/27/20 10:11 PM, Qian Cai wrote:
> > 
> > > On Apr 27, 2020, at 9:39 PM, Waiman Long <longman@redhat.com> wrote:
> > > 
> > > The sequence that was prevented by this patch is "kn->count --> \
> > > mem_hotplug_lock.rwsem". This sequence isn't directly in the splat. Once this \
> > > link is broken, the 3-lock circular loop cannot be formed. Maybe I should \
> > > modify the commit log to make this point more clear.
> > I don't know what you are talking about. Once trylock succeed once, you will have \
> > kn->count —> cpu/memory_hotplug_lock. 
> Trylock is handled differently from lockdep's perspective as trylock can failed. \
> When trylock succeeds, the critical section is executed. As long as it doesn't try \
> to acquire another lock in the circular chain, the execution will finish at some \
> point and release the lock. On the other hand, if another task has already held all \
> those locks, the trylock will fail and held locks should be released. Again, no \
> deadlock will happen.

So once,

CPU0 (trylock succeed):
kn->count —> cpu/memory_hotplug_lock.

Did you mean that lockdep will not record this existing chain?

If it did. Then later, are you still sure that CPU1 (via memcg path below) will still \
be impossible to trigger a splat just because lockdep will be able to tell that those \
arennon-exclusive (cpu/memory_hotplug_lock) locks instead?

 cpu/memory_hotplug_lock -> kn->count

[  290.805818] -> #3 (kn->count#86){++++}-{0:0}:
[  290.811954]        __kernfs_remove+0x455/0x4c0
[  290.816428]        kernfs_remove+0x23/0x40
[  290.820554]        sysfs_remove_dir+0x74/0x80
[  290.824947]        kobject_del+0x57/0xa0
[  290.828905]        sysfs_slab_unlink+0x1c/0x20
[  290.833377]        shutdown_cache+0x15d/0x1c0
[  290.837964]        kmemcg_cache_shutdown_fn+0xe/0x20
[  290.842963]        kmemcg_workfn+0x35/0x50   <—— cpu/memory_hotplug_lock
[  290.847095]        process_one_work+0x57e/0xb90
[  290.851658]        worker_thread+0x63/0x5b0
[  290.855872]        kthread+0x1f7/0x220
[  290.859653]        ret_from_fork+0x27/0x50=


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic