Messages in this thread | | | Date | Thu, 21 Mar 2013 14:18:15 -0700 | Subject | Re: VFS deadlock ? | From | Linus Torvalds <> |
| |
On Thu, Mar 21, 2013 at 2:02 PM, Dave Jones <davej@redhat.com> wrote: > > here we go... > > WARNING: at fs/namei.c:2335 lock_rename+0x156/0x160() > p1=irda p2=irda
Ok, good. I ssupect it's /proc or /sys, we do have that entry there.
But in fact I suspect we do want the parent name after all, because I think we have multiple "irda" directories. There's the one in /proc/net/ (added by net/irda/irproc.c), and there's a sysctl CTL_DIR "irda" directory (kernel/sysctl_binary.c). And there might even be a few other ones in /sys too, thanks to the ldisc called "irda" etc.
I don't see where the shared inode comes from, but I suspect that would be easier to guess if we actually see which particular case it ends up being..
> followed by... > ===================================== > [ BUG: bad unlock balance detected! ]
Oh, ok, that's just because the unlock path doesn't have the same logic for unlocking identical inodes that the thing just added to the locking path. You'd need to add a check for "same inode" and only unlock it once.
So that was my fault in asking for a non-BUG_ON and not doing the complete thing. See "unlock_rename()" - you'd need to change the "p1 != p2" test there to "p1->d_inode != p2->d_inode" there to match the logic in lock_rename()
Linus
| |