Revision 6946bd636364effce06ea46fe8f8cd6e2edb004e authored by Peter Zijlstra on 27 August 2006, 08:23:31 UTC, committed by Linus Torvalds on 27 August 2006, 18:01:29 UTC
On Wed, 2006-08-09 at 07:57 +0200, Rolf Eike Beer wrote: > ============================================= > [ INFO: possible recursive locking detected ] > --------------------------------------------- > parted/7929 is trying to acquire lock: > (&bdev->bd_mutex){--..}, at: [<c105eb8d>] __blkdev_put+0x1e/0x13c > > but task is already holding lock: > (&bdev->bd_mutex){--..}, at: [<c105eec6>] do_open+0x72/0x3a8 > > other info that might help us debug this: > 1 lock held by parted/7929: > #0: (&bdev->bd_mutex){--..}, at: [<c105eec6>] do_open+0x72/0x3a8 > stack backtrace: > [<c1003aad>] show_trace_log_lvl+0x58/0x15b > [<c100495f>] show_trace+0xd/0x10 > [<c1004979>] dump_stack+0x17/0x1a > [<c102dee5>] __lock_acquire+0x753/0x99c > [<c102e3b0>] lock_acquire+0x4a/0x6a > [<c1204501>] mutex_lock_nested+0xc8/0x20c > [<c105eb8d>] __blkdev_put+0x1e/0x13c > [<c105ecc4>] blkdev_put+0xa/0xc > [<c105f18a>] do_open+0x336/0x3a8 > [<c105f21b>] blkdev_open+0x1f/0x4c > [<c1057b40>] __dentry_open+0xc7/0x1aa > [<c1057c91>] nameidata_to_filp+0x1c/0x2e > [<c1057cd1>] do_filp_open+0x2e/0x35 > [<c1057dd7>] do_sys_open+0x38/0x68 > [<c1057e33>] sys_open+0x16/0x18 > [<c1002845>] sysenter_past_esp+0x56/0x8d OK, I'm having a look here; its all new to me so bear with me. blkdev_open() calls do_open(bdev, ...,BD_MUTEX_NORMAL) and takes mutex_lock_nested(&bdev->bd_mutex, BD_MUTEX_NORMAL) then something fails, and we're thrown to: out_first: where if (bdev != bdev->bd_contains) blkdev_put(bdev->bd_contains) which is __blkdev_put(bdev->bd_contains, BD_MUTEX_NORMAL) which does mutex_lock_nested(&bdev->bd_contains->bd_mutex, BD_MUTEX_NORMAL) <--- lockdep trigger When going to out_first, dbev->bd_contains is either bdev or whole, and since we take the branch it must be whole. So it seems to me the following patch would be the right one: [akpm@osdl.org: compile fix] Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Arjan van de Ven <arjan@linux.intel.com> Acked-by: NeilBrown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
1 parent 7334bb4
File | Mode | Size |
---|---|---|
ChangeLog | -rw-r--r-- | 92.4 KB |
Makefile | -rw-r--r-- | 463 bytes |
aops.c | -rw-r--r-- | 48.2 KB |
aops.h | -rw-r--r-- | 4.0 KB |
attrib.c | -rw-r--r-- | 90.2 KB |
attrib.h | -rw-r--r-- | 4.2 KB |
bitmap.c | -rw-r--r-- | 5.5 KB |
bitmap.h | -rw-r--r-- | 3.5 KB |
collate.c | -rw-r--r-- | 3.6 KB |
collate.h | -rw-r--r-- | 1.7 KB |
compress.c | -rw-r--r-- | 28.8 KB |
debug.c | -rw-r--r-- | 5.3 KB |
debug.h | -rw-r--r-- | 2.4 KB |
dir.c | -rw-r--r-- | 52.3 KB |
dir.h | -rw-r--r-- | 1.6 KB |
endian.h | -rw-r--r-- | 2.2 KB |
file.c | -rw-r--r-- | 70.0 KB |
index.c | -rw-r--r-- | 14.8 KB |
index.h | -rw-r--r-- | 5.5 KB |
inode.c | -rw-r--r-- | 98.6 KB |
inode.h | -rw-r--r-- | 11.1 KB |
layout.h | -rw-r--r-- | 98.2 KB |
lcnalloc.c | -rw-r--r-- | 32.4 KB |
lcnalloc.h | -rw-r--r-- | 5.7 KB |
logfile.c | -rw-r--r-- | 24.6 KB |
logfile.h | -rw-r--r-- | 13.5 KB |
malloc.h | -rw-r--r-- | 3.2 KB |
mft.c | -rw-r--r-- | 99.7 KB |
mft.h | -rw-r--r-- | 4.0 KB |
mst.c | -rw-r--r-- | 6.9 KB |
namei.c | -rw-r--r-- | 18.4 KB |
ntfs.h | -rw-r--r-- | 4.9 KB |
quota.c | -rw-r--r-- | 3.6 KB |
quota.h | -rw-r--r-- | 1.2 KB |
runlist.c | -rw-r--r-- | 59.5 KB |
runlist.h | -rw-r--r-- | 3.3 KB |
super.c | -rw-r--r-- | 103.5 KB |
sysctl.c | -rw-r--r-- | 2.5 KB |
sysctl.h | -rw-r--r-- | 1.3 KB |
time.h | -rw-r--r-- | 3.5 KB |
types.h | -rw-r--r-- | 2.1 KB |
unistr.c | -rw-r--r-- | 12.2 KB |
upcase.c | -rw-r--r-- | 3.9 KB |
usnjrnl.c | -rw-r--r-- | 2.7 KB |
usnjrnl.h | -rw-r--r-- | 9.3 KB |
volume.h | -rw-r--r-- | 6.8 KB |
Computing file changes ...