Re: slab_pre_alloc_hook() strips __GFP_NOLOCKDEP away.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/22/22 18:39, Sebastian Andrzej Siewior wrote:
> 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;

Hmm but gfp_allowed_mask already should contain __GFP_NOLOCKDEP after
kernel_init_freeable() is reached. I doubt we can reach fs or reclaim
code before that?

>  
>  	might_alloc(flags);
>  
> ?
> 
> Sebastian






[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux