Run into | ====================================================== | WARNING: possible circular locking dependency detected | 5.17.0-next-20220322 #19 Not tainted | ------------------------------------------------------ | kswapd1/513 is trying to acquire lock: | ffff888555b7e628 (&xfs_dir_ilock_class){++++}-{3:3}, at: xfs_icwalk_ag+0x36c/0x810 | | but task is already holding lock: | ffffffff82a2fb20 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat+0x600/0x740 | | which lock already depends on the new lock. | | | the existing dependency chain (in reverse order) is: | | -> #1 (fs_reclaim){+.+.}-{0:0}: | fs_reclaim_acquire+0xaa/0xe0 | __kmalloc_node+0x65/0x3e0 | xfs_attr_copy_value+0x70/0xa0 … and I think this is similar to commit 704687deaae76 ("mm: make slab and vmalloc allocators __GFP_NOLOCKDEP aware") and maybe something like this: diff --git a/mm/slab.h b/mm/slab.h --- a/mm/slab.h +++ b/mm/slab.h @@ -717,7 +717,7 @@ static inline struct kmem_cache *slab_pre_alloc_hook(struct kmem_cache *s, struct obj_cgroup **objcgp, size_t size, gfp_t flags) { - flags &= gfp_allowed_mask; + flags &= gfp_allowed_mask | __GFP_NOLOCKDEP; might_alloc(flags); ? Sebastian