• E
    bfs: fix Lockdep warning · 1558182f
    Eric Sesterhenn 提交于
    This fixes:
    
      =============================================
      [ INFO: possible recursive locking detected ]
      2.6.27-rc5-00283-g70bb0896 #68
      ---------------------------------------------
      touch/6855 is trying to acquire lock:
       (&info->bfs_lock){--..}, at: [<c02262f5>] bfs_delete_inode+0x9e/0x18c
    
      but task is already holding lock:
       (&info->bfs_lock){--..}, at: [<c0226c00>] bfs_create+0x45/0x187
    
      other info that might help us debug this:
      2 locks held by touch/6855:
       #0:  (&type->i_mutex_dir_key#5){--..}, at: [<c018ad13>] do_filp_open+0x10b/0x62f
       #1:  (&info->bfs_lock){--..}, at: [<c0226c00>] bfs_create+0x45/0x187
    
      stack backtrace:
      Pid: 6855, comm: touch Not tainted 2.6.27-rc5-00283-g70bb0896 #68
       [<c013e769>] validate_chain+0x458/0x9f4
       [<c013bece>] ? trace_hardirqs_off+0xb/0xd
       [<c013f36b>] __lock_acquire+0x666/0x6e0
       [<c013f440>] lock_acquire+0x5b/0x77
       [<c02262f5>] ? bfs_delete_inode+0x9e/0x18c
       [<c06aab74>] mutex_lock_nested+0xbc/0x234
       [<c02262f5>] ? bfs_delete_inode+0x9e/0x18c
       [<c02262f5>] ? bfs_delete_inode+0x9e/0x18c
       [<c02262f5>] bfs_delete_inode+0x9e/0x18c
       [<c0226257>] ? bfs_delete_inode+0x0/0x18c
       [<c01925e1>] generic_delete_inode+0x94/0xfe
       [<c019265d>] generic_drop_inode+0x12/0x12f
       [<c0191b7e>] iput+0x4b/0x4e
       [<c0226d1e>] bfs_create+0x163/0x187
       [<c0188b42>] vfs_create+0xa6/0x114
       [<c018adb5>] do_filp_open+0x1ad/0x62f
       [<c0107cdc>] ? native_sched_clock+0x82/0x96
       [<c06ac309>] ? _spin_unlock+0x27/0x3c
       [<c019379e>] ? alloc_fd+0xbf/0xc9
       [<c06ae2f4>] ? sub_preempt_count+0x9d/0xab
       [<c019379e>] ? alloc_fd+0xbf/0xc9
       [<c0180391>] do_sys_open+0x42/0xb8
       [<c041d564>] ? trace_hardirqs_on_thunk+0xc/0x10
       [<c0180449>] sys_open+0x1e/0x26
       [<c01038bd>] sysenter_do_call+0x12/0x31
       =======================
    
    The problem is that we don't unlock the bfs->lock mutex before calling
    iput (we do in the other cases).
    Signed-off-by: NEric Sesterhenn <snakebyte@gmx.de>
    Cc: Tigran Aivazian <tigran@aivazian.fsnet.co.uk>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    1558182f
dir.c 8.9 KB