commit
62b61f611e ("ksm: memory hotremove migration only") caused the
following new lockdep warning.
=======================================================
[ INFO: possible circular locking dependency detected ]
-------------------------------------------------------
bash/1621 is trying to acquire lock:
((memory_chain).rwsem){.+.+.+}, at: [<
ffffffff81079339>]
__blocking_notifier_call_chain+0x69/0xc0
but task is already holding lock:
(ksm_thread_mutex){+.+.+.}, at: [<
ffffffff8113a3aa>]
ksm_memory_callback+0x3a/0xc0
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (ksm_thread_mutex){+.+.+.}:
[<
ffffffff8108b70a>] lock_acquire+0xaa/0x140
[<
ffffffff81505d74>] __mutex_lock_common+0x44/0x3f0
[<
ffffffff81506228>] mutex_lock_nested+0x48/0x60
[<
ffffffff8113a3aa>] ksm_memory_callback+0x3a/0xc0
[<
ffffffff8150c21c>] notifier_call_chain+0x8c/0xe0
[<
ffffffff8107934e>] __blocking_notifier_call_chain+0x7e/0xc0
[<
ffffffff810793a6>] blocking_notifier_call_chain+0x16/0x20
[<
ffffffff813afbfb>] memory_notify+0x1b/0x20
[<
ffffffff81141b7c>] remove_memory+0x1cc/0x5f0
[<
ffffffff813af53d>] memory_block_change_state+0xfd/0x1a0
[<
ffffffff813afd62>] store_mem_state+0xe2/0xf0
[<
ffffffff813a0bb0>] sysdev_store+0x20/0x30
[<
ffffffff811bc116>] sysfs_write_file+0xe6/0x170
[<
ffffffff8114f398>] vfs_write+0xc8/0x190
[<
ffffffff8114fc14>] sys_write+0x54/0x90
[<
ffffffff810028b2>] system_call_fastpath+0x16/0x1b
-> #0 ((memory_chain).rwsem){.+.+.+}:
[<
ffffffff8108b5ba>] __lock_acquire+0x155a/0x1600
[<
ffffffff8108b70a>] lock_acquire+0xaa/0x140
[<
ffffffff81506601>] down_read+0x51/0xa0
[<
ffffffff81079339>] __blocking_notifier_call_chain+0x69/0xc0
[<
ffffffff810793a6>] blocking_notifier_call_chain+0x16/0x20
[<
ffffffff813afbfb>] memory_notify+0x1b/0x20
[<
ffffffff81141f1e>] remove_memory+0x56e/0x5f0
[<
ffffffff813af53d>] memory_block_change_state+0xfd/0x1a0
[<
ffffffff813afd62>] store_mem_state+0xe2/0xf0
[<
ffffffff813a0bb0>] sysdev_store+0x20/0x30
[<
ffffffff811bc116>] sysfs_write_file+0xe6/0x170
[<
ffffffff8114f398>] vfs_write+0xc8/0x190
[<
ffffffff8114fc14>] sys_write+0x54/0x90
[<
ffffffff810028b2>] system_call_fastpath+0x16/0x1b
But it's a false positive. Both memory_chain.rwsem and ksm_thread_mutex
have an outer lock (mem_hotplug_mutex). So they cannot deadlock.
Thus, This patch annotate ksm_thread_mutex is not deadlock source.
[akpm@linux-foundation.org: update comment, from Hugh]
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Acked-by: Hugh Dickins <hughd@google.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>