• Naohiro Aota's avatar
    mm/kmemleak: allow __GFP_NOLOCKDEP passed to kmemleak's gfp · 79d37050
    Naohiro Aota authored
    In a memory pressure situation, I'm seeing the lockdep WARNING below.
    Actually, this is similar to a known false positive which is already
    addressed by commit 6dcde60e ("xfs: more lockdep whackamole with
    kmem_alloc*").
    
    This warning still persists because it's not from kmalloc() itself but
    from an allocation for kmemleak object.  While kmalloc() itself suppress
    the warning with __GFP_NOLOCKDEP, gfp_kmemleak_mask() is dropping the
    flag for the kmemleak's allocation.
    
    Allow __GFP_NOLOCKDEP to be passed to kmemleak's allocation, so that the
    warning for it is also suppressed.
    
      ======================================================
      WARNING: possible circular locking dependency detected
      5.14.0-rc7-BTRFS-ZNS+ #37 Not tainted
      ------------------------------------------------------
      kswapd0/288 is trying to acquire lock:
      ffff88825ab45df0 (&xfs_nondir_ilock_class){++++}-{3:3}, at: xfs_ilock+0x8a/0x250
    
      but task is already holding lock:
      ffffffff848cc1e0 (fs_reclaim){+.+.}-{0:0}, at: __fs_reclaim_acquire+0x5/0x30
    
      which lock already depends on the new lock.
    
      the existing dependency chain (in reverse order) is:
    
      -> #1 (fs_reclaim){+.+.}-{0:0}:
             fs_reclaim_acquire+0x112/0x160
             kmem_cache_alloc+0x48/0x400
             create_object.isra.0+0x42/0xb10
             kmemleak_alloc+0x48/0x80
             __kmalloc+0x228/0x440
             kmem_alloc+0xd3/0x2b0
             kmem_alloc_large+0x5a/0x1c0
             xfs_attr_copy_value+0x112/0x190
             xfs_attr_shortform_getvalue+0x1fc/0x300
             xfs_attr_get_ilocked+0x125/0x170
             xfs_attr_get+0x329/0x450
             xfs_get_acl+0x18d/0x430
             get_acl.part.0+0xb6/0x1e0
             posix_acl_xattr_get+0x13a/0x230
             vfs_getxattr+0x21d/0x270
             getxattr+0x126/0x310
             __x64_sys_fgetxattr+0x1a6/0x2a0
             do_syscall_64+0x3b/0x90
             entry_SYSCALL_64_after_hwframe+0x44/0xae
    
      -> #0 (&xfs_nondir_ilock_class){++++}-{3:3}:
             __lock_acquire+0x2c0f/0x5a00
             lock_acquire+0x1a1/0x4b0
             down_read_nested+0x50/0x90
             xfs_ilock+0x8a/0x250
             xfs_can_free_eofblocks+0x34f/0x570
             xfs_inactive+0x411/0x520
             xfs_fs_destroy_inode+0x2c8/0x710
             destroy_inode+0xc5/0x1a0
             evict+0x444/0x620
             dispose_list+0xfe/0x1c0
             prune_icache_sb+0xdc/0x160
             super_cache_scan+0x31e/0x510
             do_shrink_slab+0x337/0x8e0
             shrink_slab+0x362/0x5c0
             shrink_node+0x7a7/0x1a40
             balance_pgdat+0x64e/0xfe0
             kswapd+0x590/0xa80
             kthread+0x38c/0x460
             ret_from_fork+0x22/0x30
    
      other info that might help us debug this:
       Possible unsafe locking scenario:
             CPU0                    CPU1
             ----                    ----
        lock(fs_reclaim);
                                     lock(&xfs_nondir_ilock_class);
                                     lock(fs_reclaim);
        lock(&xfs_nondir_ilock_class);
    
       *** DEADLOCK ***
      3 locks held by kswapd0/288:
       #0: ffffffff848cc1e0 (fs_reclaim){+.+.}-{0:0}, at: __fs_reclaim_acquire+0x5/0x30
       #1: ffffffff848a08d8 (shrinker_rwsem){++++}-{3:3}, at: shrink_slab+0x269/0x5c0
       #2: ffff8881a7a820e8 (&type->s_umount_key#60){++++}-{3:3}, at: super_cache_scan+0x5a/0x510
    
    Link: https://lkml.kernel.org/r/20210907055659.3182992-1-naohiro.aota@wdc.comSigned-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Cc: "Darrick J . Wong" <djwong@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    79d37050
kmemleak.c 56.5 KB