On Sun, May 21, 2023 at 06:11:42PM -0400, Kurt Miller wrote:
> 
> 
> > On May 17, 2023, at 2:39 PM, Kurt Miller <k...@intricatesoftware.com> wrote:
> > 
> > On May 13, 2023, at 3:07 PM, Kurt Miller <k...@intricatesoftware.com 
> > <mailto:k...@intricatesoftware.com>> wrote:
> >> 
> >> On May 13, 2023, at 9:16 AM, Kurt Miller <k...@intricatesoftware.com> 
> >> wrote:
> >>> 
> >>> On May 12, 2023, at 10:26 AM, Martin Pieuchot <m...@openbsd.org> wrote:
> >>>> 
> >>>> On 09/05/23(Tue) 20:02, Kurt Miller wrote:
> >>>>> While building devel/jdk/1.8 on May 3rd snapshot I noticed the build 
> >>>>> freezing
> >>>>> and processes getting stuck like ps. After enabling ddb.console I was 
> >>>>> able to
> >>>>> reproduce the livelock and capture cpu traces. Dmesg at the end.
> >>>>> Let me know if more information is needed as this appears to be rather
> >>>>> reproducible on my T4-1.
> >>>> 
> >>>> It seems that all CPUs are waiting for the KERNEL_LOCK().  Doing ps /o
> >>>> in ddb(4) should show us which CPU is currently holding it.  I can't
> >>>> figure it out just by looking at the traces below.
> >>>> 
> 
> I managed to get WITNESS working on sparc64. Here’s what it found:
> 
> ddb{0}> show witness /b
> Number of known direct relationships is 255
> 
> Lock order reversal between "&mp->mnt_lock"(rwlock) and 
> "&ip->i_lock"(rrwlock)!
> Lock order "&mp->mnt_lock"(rwlock) -> "&ip->i_lock"(rrwlock) first seen at:
> #0  rrw_enter+0x58
> #1  VOP_LOCK+0x5c
> #2  vn_lock+0x9c
> #3  vget+0x12c
> #4  cache_lookup+0x308
> #5  ufs_lookup+0x11c
> #6  VOP_LOOKUP+0x40
> #7  vfs_lookup+0x2fc
> #8  namei+0x37c
> #9  ffs_mount+0x340
> #10 sys_mount+0x2fc
> #11 syscall+0x3c4
> #12 syscall_setup+0x134
> 
> Lock order "&ip->i_lock"(rrwlock) -> "&mp->mnt_lock"(rwlock) first seen at:
> #0  vfs_busy+0x34
> #1  vfs_lookup+0x39c
> #2  namei+0x37c
> #3  sys___realpath+0x1bc
> #4  syscall+0x3c4
> #5  syscall_setup+0x134
> 

I have seen these WITNESS warnings on other systems as well. I doubt this
is the problem. IIRC this warning is because sys_mount() is doing it wrong
but it is not really an issue since sys_mount is not called often.

-- 
:wq Claudio

Reply via email to