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 |
---|---|---|
Kbuild | -rw-r--r-- | 39 bytes |
a.out.h | -rw-r--r-- | 188 bytes |
atomic.h | -rw-r--r-- | 8.9 KB |
auxvec.h | -rw-r--r-- | 54 bytes |
ax88796.h | -rw-r--r-- | 751 bytes |
bitops.h | -rw-r--r-- | 4.2 KB |
bug.h | -rw-r--r-- | 1.3 KB |
bugs.h | -rw-r--r-- | 445 bytes |
busctl-regs.h | -rw-r--r-- | 2.0 KB |
byteorder.h | -rw-r--r-- | 290 bytes |
cache.h | -rw-r--r-- | 727 bytes |
cacheflush.h | -rw-r--r-- | 3.0 KB |
checksum.h | -rw-r--r-- | 4.7 KB |
cpu-irqs.h | -rw-r--r-- | 1.9 KB |
cpumask.h | -rw-r--r-- | 109 bytes |
cputime.h | -rw-r--r-- | 109 bytes |
current.h | -rw-r--r-- | 685 bytes |
delay.h | -rw-r--r-- | 1.3 KB |
div64.h | -rw-r--r-- | 31 bytes |
dm9000.h | -rw-r--r-- | 1.1 KB |
dma-mapping.h | -rw-r--r-- | 5.1 KB |
dma.h | -rw-r--r-- | 3.7 KB |
elf.h | -rw-r--r-- | 5.3 KB |
emergency-restart.h | -rw-r--r-- | 149 bytes |
errno.h | -rw-r--r-- | 102 bytes |
fcntl.h | -rw-r--r-- | 31 bytes |
fpu.h | -rw-r--r-- | 222 bytes |
futex.h | -rw-r--r-- | 334 bytes |
gdb-stub.h | -rw-r--r-- | 4.4 KB |
gpio-regs.h | -rw-r--r-- | 3.6 KB |
hardirq.h | -rw-r--r-- | 797 bytes |
highmem.h | -rw-r--r-- | 5.2 KB |
hw_irq.h | -rw-r--r-- | 484 bytes |
ide.h | -rw-r--r-- | 1.2 KB |
init.h | -rw-r--r-- | 340 bytes |
io.h | -rw-r--r-- | 9.4 KB |
ioctl.h | -rw-r--r-- | 31 bytes |
ioctls.h | -rw-r--r-- | 2.4 KB |
ipc.h | -rw-r--r-- | 29 bytes |
ipcbuf.h | -rw-r--r-- | 629 bytes |
irc-regs.h | -rw-r--r-- | 1.8 KB |
irq-routing.h | -rw-r--r-- | 1.9 KB |
irq.h | -rw-r--r-- | 1.2 KB |
kmap_types.h | -rw-r--r-- | 641 bytes |
linkage.h | -rw-r--r-- | 114 bytes |
local.h | -rw-r--r-- | 101 bytes |
math-emu.h | -rw-r--r-- | 6.3 KB |
mb-regs.h | -rw-r--r-- | 6.9 KB |
mb86943a.h | -rw-r--r-- | 1.7 KB |
mb93091-fpga-irqs.h | -rw-r--r-- | 1.1 KB |
mb93093-fpga-irqs.h | -rw-r--r-- | 852 bytes |
mb93493-irqs.h | -rw-r--r-- | 1.8 KB |
mb93493-regs.h | -rw-r--r-- | 12.3 KB |
mc146818rtc.h | -rw-r--r-- | 485 bytes |
mem-layout.h | -rw-r--r-- | 2.0 KB |
mman.h | -rw-r--r-- | 614 bytes |
mmu.h | -rw-r--r-- | 1.3 KB |
mmu_context.h | -rw-r--r-- | 1.3 KB |
module.h | -rw-r--r-- | 699 bytes |
msgbuf.h | -rw-r--r-- | 980 bytes |
mutex.h | -rw-r--r-- | 308 bytes |
namei.h | -rw-r--r-- | 283 bytes |
page.h | -rw-r--r-- | 2.4 KB |
param.h | -rw-r--r-- | 466 bytes |
pci.h | -rw-r--r-- | 3.7 KB |
percpu.h | -rw-r--r-- | 108 bytes |
pgalloc.h | -rw-r--r-- | 1.7 KB |
pgtable.h | -rw-r--r-- | 17.4 KB |
poll.h | -rw-r--r-- | 386 bytes |
posix_types.h | -rw-r--r-- | 1.9 KB |
processor.h | -rw-r--r-- | 4.0 KB |
ptrace.h | -rw-r--r-- | 2.4 KB |
registers.h | -rw-r--r-- | 6.7 KB |
resource.h | -rw-r--r-- | 114 bytes |
scatterlist.h | -rw-r--r-- | 942 bytes |
sections.h | -rw-r--r-- | 1.2 KB |
segment.h | -rw-r--r-- | 1.1 KB |
semaphore.h | -rw-r--r-- | 3.5 KB |
sembuf.h | -rw-r--r-- | 697 bytes |
serial-regs.h | -rw-r--r-- | 1.6 KB |
serial.h | -rw-r--r-- | 378 bytes |
setup.h | -rw-r--r-- | 613 bytes |
shmbuf.h | -rw-r--r-- | 1.1 KB |
shmparam.h | -rw-r--r-- | 144 bytes |
sigcontext.h | -rw-r--r-- | 803 bytes |
siginfo.h | -rw-r--r-- | 204 bytes |
signal.h | -rw-r--r-- | 3.4 KB |
smp.h | -rw-r--r-- | 100 bytes |
socket.h | -rw-r--r-- | 1.1 KB |
sockios.h | -rw-r--r-- | 285 bytes |
spinlock.h | -rw-r--r-- | 516 bytes |
spr-regs.h | -rw-r--r-- | 17.4 KB |
stat.h | -rw-r--r-- | 2.2 KB |
statfs.h | -rw-r--r-- | 106 bytes |
string.h | -rw-r--r-- | 1.4 KB |
suspend.h | -rw-r--r-- | 537 bytes |
system.h | -rw-r--r-- | 5.1 KB |
termbits.h | -rw-r--r-- | 3.8 KB |
termios.h | -rw-r--r-- | 2.0 KB |
thread_info.h | -rw-r--r-- | 4.2 KB |
timer-regs.h | -rw-r--r-- | 3.6 KB |
timex.h | -rw-r--r-- | 601 bytes |
tlb.h | -rw-r--r-- | 510 bytes |
tlbflush.h | -rw-r--r-- | 2.0 KB |
topology.h | -rw-r--r-- | 216 bytes |
types.h | -rw-r--r-- | 1.4 KB |
uaccess.h | -rw-r--r-- | 8.2 KB |
ucontext.h | -rw-r--r-- | 242 bytes |
unaligned.h | -rw-r--r-- | 5.5 KB |
unistd.h | -rw-r--r-- | 15.7 KB |
user.h | -rw-r--r-- | 3.3 KB |
vga.h | -rw-r--r-- | 464 bytes |
virtconvert.h | -rw-r--r-- | 1.1 KB |
xor.h | -rw-r--r-- | 29 bytes |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...