• K
    ksm: annotate ksm_thread_mutex is no deadlock source · a0b0f58c
    KOSAKI Motohiro 提交于
    commit 62b61f61 ("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: NKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Acked-by: NHugh 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: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    a0b0f58c
ksm.c 52.8 KB