DF-0791 / panic.txt
=== Sibling lockmgr self-lock that blocks the live dive path (ntfs_ntlookupfile+0x57) ===
Captured from dfbsd-qemu/boot.log after `stat /mnt/ntfs/a` on the crafted image
(ntfs_0791.img, root-dir INDEX_ROOT entry "zzzzzz" SUBNODE reclen=0xFFFF).
This panic fires at the TOP of ntfs_ntlookupfile (inlined ntfs_ntget ->
LOCKMGR(&ip->i_lock, LK_EXCLUSIVE)), BEFORE the INDEX_ROOT walk and the
subnode dive (cn read at +0x2c0). It is a separate NTFS directory-lookup
defect (not DF-0791) that makes the DF-0791 dive latent on this kernel.
panic: lockmgr: locking against itself
lockmgr_exclusive() at lockmgr_exclusive+0x3e0 0xffffffff80647f30
lockmgr_exclusive() at lockmgr_exclusive+0x3e0 0xffffffff80647f30
ntfs_ntlookupfile() at ntfs_ntlookupfile+0x57 0xffffffff82604c27
ntfs_lookup() at ntfs_lookup+0x63 0xffffffff82601e13
Stopped at Debugger+0x7c: movb $0,0xbdaf09(%rip)
db>
Disassembly of ntfs_ntlookupfile (ntfs.ko, ntfs_ntlookupfile @ 0x4bd0):
4c15: addl $0x1,0x70(%r14) ; ip->i_usecount++ (inlined ntfs_ntget)
4c1a: lea 0x48(%r14),%rdi ; &ip->i_lock
4c22: callq 4c27 ; -> lockmgr(LK_EXCLUSIVE) [+0x57 = self-lock]
4c27: ... ; (return addr = ntfs_ntlookupfile+0x57)
4c40: callq (ntfs_ntvattrget NTFS_A_INDXROOT=0x90) ; [+0x75] INDEX_ROOT fetch is AFTER the panic
The dive (cn = *(cn_t*)(rdbuf+aoff+reclen-8)) is at +0x2c0, far past the panic point.