syzbot is reporting lockdep warning in __stack_depot_save(), for wakeup_kswapd() from wake_all_kswapds() from __alloc_pages_slowpath() calls wakeup_kcompactd() when __GFP_KSWAPD_RECLAIM is set and __GFP_DIRECT_RECLAIM is not set (i.e. GFP_ATOMIC). Since __stack_depot_save() might be called with arbitrary locks held, __stack_depot_save() should not wake kswapd which in turn wakes kcompactd. Reported-by: syzbot <syzbot+ece2915262061d6e0ac1@xxxxxxxxxxxxxxxxxxxxxxxxx> Closes: https://syzkaller.appspot.com/bug?extid=ece2915262061d6e0ac1 Signed-off-by: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> Fixes: cd11016e5f52 ("mm, kasan: stackdepot implementation. Enable stackdepot for SLAB") --- lib/stackdepot.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 2f5aa851834e..5c331a80b87a 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c @@ -405,7 +405,10 @@ depot_stack_handle_t __stack_depot_save(unsigned long *entries, * contexts and I/O. */ alloc_flags &= ~GFP_ZONEMASK; - alloc_flags &= (GFP_ATOMIC | GFP_KERNEL); + if (!(alloc_flags & __GFP_DIRECT_RECLAIM)) + alloc_flags &= __GFP_HIGH; + else + alloc_flags &= GFP_KERNEL; alloc_flags |= __GFP_NOWARN; page = alloc_pages(alloc_flags, DEPOT_POOL_ORDER); if (page) -- 2.18.4