Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
forked fromtorvalds/linux

Commit2e517d6

Browse files
Tetsuo Handatorvalds
Tetsuo Handa
authored andcommitted
lockdep: fix fs_reclaim warning
Dave Jones reported fs_reclaim lockdep warnings. ============================================ WARNING: possible recursive locking detected 4.15.0-rc9-backup-debug+ #1 Not tainted -------------------------------------------- sshd/24800 is trying to acquire lock: (fs_reclaim){+.+.}, at: [<0000000084f438c2>] fs_reclaim_acquire.part.102+0x5/0x30 but task is already holding lock: (fs_reclaim){+.+.}, at: [<0000000084f438c2>] fs_reclaim_acquire.part.102+0x5/0x30 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(fs_reclaim); lock(fs_reclaim); *** DEADLOCK *** May be due to missing lock nesting notation 2 locks held by sshd/24800: #0: (sk_lock-AF_INET6){+.+.}, at: [<000000001a069652>] tcp_sendmsg+0x19/0x40 #1: (fs_reclaim){+.+.}, at: [<0000000084f438c2>] fs_reclaim_acquire.part.102+0x5/0x30 stack backtrace: CPU: 3 PID: 24800 Comm: sshd Not tainted 4.15.0-rc9-backup-debug+ #1 Call Trace: dump_stack+0xbc/0x13f __lock_acquire+0xa09/0x2040 lock_acquire+0x12e/0x350 fs_reclaim_acquire.part.102+0x29/0x30 kmem_cache_alloc+0x3d/0x2c0 alloc_extent_state+0xa7/0x410 __clear_extent_bit+0x3ea/0x570 try_release_extent_mapping+0x21a/0x260 __btrfs_releasepage+0xb0/0x1c0 btrfs_releasepage+0x161/0x170 try_to_release_page+0x162/0x1c0 shrink_page_list+0x1d5a/0x2fb0 shrink_inactive_list+0x451/0x940 shrink_node_memcg.constprop.88+0x4c9/0x5e0 shrink_node+0x12d/0x260 try_to_free_pages+0x418/0xaf0 __alloc_pages_slowpath+0x976/0x1790 __alloc_pages_nodemask+0x52c/0x5c0 new_slab+0x374/0x3f0 ___slab_alloc.constprop.81+0x47e/0x5a0 __slab_alloc.constprop.80+0x32/0x60 __kmalloc_track_caller+0x267/0x310 __kmalloc_reserve.isra.40+0x29/0x80 __alloc_skb+0xee/0x390 sk_stream_alloc_skb+0xb8/0x340 tcp_sendmsg_locked+0x8e6/0x1d30 tcp_sendmsg+0x27/0x40 inet_sendmsg+0xd0/0x310 sock_write_iter+0x17a/0x240 __vfs_write+0x2ab/0x380 vfs_write+0xfb/0x260 SyS_write+0xb6/0x140 do_syscall_64+0x1e5/0xc05 entry_SYSCALL64_slow_path+0x25/0x25This warning is caused by commitd92a8cf ("locking/lockdep:Rework FS_RECLAIM annotation") which replaced the use oflockdep_{set,clear}_current_reclaim_state() in __perform_reclaim()and lockdep_trace_alloc() in slab_pre_alloc_hook() withfs_reclaim_acquire()/ fs_reclaim_release().Since __kmalloc_reserve() from __alloc_skb() adds __GFP_NOMEMALLOC |__GFP_NOWARN to gfp_mask, and all reclaim path simply propagates__GFP_NOMEMALLOC, fs_reclaim_acquire() in slab_pre_alloc_hook() istrying to grab the 'fake' lock again when __perform_reclaim() alreadygrabbed the 'fake' lock.The /* this guy won't enter reclaim */ if ((current->flags & PF_MEMALLOC) && !(gfp_mask & __GFP_NOMEMALLOC)) return false;test which causes slab_pre_alloc_hook() to try to grab the 'fake' lockwas added by commitcf40bd1 ("lockdep: annotate reclaim context(__GFP_NOFS)"). But that test is outdated because PF_MEMALLOC threadwon't enter reclaim regardless of __GFP_NOMEMALLOC after commit341ce06 ("page allocator: calculate the alloc_flags for allocationonly once") added the PF_MEMALLOC safeguard ( /* Avoid recursion of direct reclaim */ if (p->flags & PF_MEMALLOC) goto nopage;in __alloc_pages_slowpath()).Thus, let's fix outdated test by removing __GFP_NOMEMALLOC test andallow __need_fs_reclaim() to return false.Link:http://lkml.kernel.org/r/201802280650.FJC73911.FOSOMLJVFFQtHO@I-love.SAKURA.ne.jpFixes:d92a8cf ("locking/lockdep: Rework FS_RECLAIM annotation")Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>Reported-by: Dave Jones <davej@codemonkey.org.uk>Tested-by: Dave Jones <davej@codemonkey.org.uk>Cc: Peter Zijlstra <peterz@infradead.org>Cc: Nick Piggin <npiggin@gmail.com>Cc: Ingo Molnar <mingo@elte.hu>Cc: Nikolay Borisov <nborisov@suse.com>Cc: Michal Hocko <mhocko@kernel.org>Cc: <stable@vger.kernel.org>[4.14+]Signed-off-by: Andrew Morton <akpm@linux-foundation.org>Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent296cefe commit2e517d6

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

‎mm/page_alloc.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3596,7 +3596,7 @@ static bool __need_fs_reclaim(gfp_t gfp_mask)
35963596
return false;
35973597

35983598
/* this guy won't enter reclaim */
3599-
if ((current->flags&PF_MEMALLOC)&& !(gfp_mask&__GFP_NOMEMALLOC))
3599+
if (current->flags&PF_MEMALLOC)
36003600
return false;
36013601

36023602
/* We're only interested __GFP_FS allocations for now */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp