On 2008-06-18 at 16:01:11 [+0200], Salvatore Benedetto <emitrax@xxxxxxxxx> wrote: > 2008/6/18 Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>: > > The more interesting question would be why get_vnode() failed in the > > first place, though. > > I investigated this a bit and in the serial log I found before the crash > that the vnode is not becoming "unbusy" > > vnode 3:4260 is not becoming unbusy! > vnode 0x9149ff00 > PANIC: ASSERT FAILED (src/system/kernel/fs/vfs.cpp:801): oldRefCount > 0 > > At first, this seems the reason, but I don't know why this is > happening and I'll look into > it more. Just a hint, if you want to track this down: Turn the dprintf()s about the vnode not becoming unbusy into an panic()s and add ktrace_printf()s in all places where a node is marked busy/unbusy. When the panic is triggered it should be easy to find out which thread marked it busy and what it is doing. Anyway, we should probably use condition variables for busy vnodes, so that we don't run into problems with slow FSs. CU, Ingo