On Mon, Apr 22, 2024 at 04:18:46PM +0200, Mark Kettenis wrote: > > Date: Mon, 22 Apr 2024 15:39:55 +0200 > > From: Alexander Bluhm <bl...@openbsd.org> > > > > Hi, > > > > I see a witness lock order reversal warning with soreceive. It > > happens during NFS regress tests. In /var/log/messages is more > > context from regress. > > > > Apr 22 03:18:08 ot29 /bsd: uid 0 on > > /mnt/regress-ffs/fstest_49fd035b8230791792326afb0604868b: out of inodes > > Apr 22 03:18:21 ot29 mountd[6781]: Bad exports list line > > /mnt/regress-nfs-server > > Apr 22 03:19:08 ot29 /bsd: witness: lock order reversal: > > Apr 22 03:19:08 ot29 /bsd: 1st 0xfffffd85c8ae12a8 vmmaplk (&map->lock) > > Apr 22 03:19:08 ot29 /bsd: 2nd 0xffff80004c488c78 nfsnode (&np->n_lock) > > Apr 22 03:19:08 ot29 /bsd: lock order data w2 -> w1 missing > > Apr 22 03:19:08 ot29 /bsd: lock order "&map->lock"(rwlock) -> > > "&np->n_lock"(rrwlock) first seen at: > > Apr 22 03:19:08 ot29 /bsd: #0 rw_enter+0x6d > > Apr 22 03:19:08 ot29 /bsd: #1 rrw_enter+0x5e > > Apr 22 03:19:08 ot29 /bsd: #2 VOP_LOCK+0x5f > > Apr 22 03:19:08 ot29 /bsd: #3 vn_lock+0xbc > > Apr 22 03:19:08 ot29 /bsd: #4 vn_rdwr+0x83 > > Apr 22 03:19:08 ot29 /bsd: #5 vndstrategy+0x2ca > > Apr 22 03:19:08 ot29 /bsd: #6 physio+0x204 > > Apr 22 03:19:08 ot29 /bsd: #7 spec_write+0x9e > > Apr 22 03:19:08 ot29 /bsd: #8 VOP_WRITE+0x45 > > Apr 22 03:19:08 ot29 /bsd: #9 vn_write+0x100 > > Apr 22 03:19:08 ot29 /bsd: #10 dofilewritev+0x14e > > Apr 22 03:19:08 ot29 /bsd: #11 sys_pwrite+0x60 > > Apr 22 03:19:08 ot29 /bsd: #12 syscall+0x588 > > Apr 22 03:19:08 ot29 /bsd: #13 Xsyscall+0x128 > > You're not talking about this one isn't it? > > > Apr 22 03:19:08 ot29 /bsd: witness: lock order reversal: > > Apr 22 03:19:08 ot29 /bsd: 1st 0xfffffd85c8ae12a8 vmmaplk (&map->lock) > > Apr 22 03:19:08 ot29 /bsd: 2nd 0xffff80002ec41860 sbufrcv > > (&so->so_rcv.sb_lock) > > Apr 22 03:19:08 ot29 /bsd: lock order "&so->so_rcv.sb_lock"(rwlock) -> > > "&map->lock"(rwlock) first seen at: > > Apr 22 03:19:08 ot29 /bsd: #0 rw_enter_read+0x50 > > Apr 22 03:19:08 ot29 /bsd: #1 uvmfault_lookup+0x8a > > Apr 22 03:19:08 ot29 /bsd: #2 uvm_fault_check+0x36 > > Apr 22 03:19:08 ot29 /bsd: #3 uvm_fault+0xfb > > Apr 22 03:19:08 ot29 /bsd: #4 kpageflttrap+0x158 > > Apr 22 03:19:08 ot29 /bsd: #5 kerntrap+0x94 > > Apr 22 03:19:08 ot29 /bsd: #6 alltraps_kern_meltdown+0x7b > > Apr 22 03:19:08 ot29 /bsd: #7 copyout+0x57 > > Apr 22 03:19:08 ot29 /bsd: #8 soreceive+0x99a > > Apr 22 03:19:08 ot29 /bsd: #9 recvit+0x1fd > > Apr 22 03:19:08 ot29 /bsd: #10 sys_recvfrom+0xa4 > > Apr 22 03:19:08 ot29 /bsd: #11 syscall+0x588 > > Apr 22 03:19:08 ot29 /bsd: #12 Xsyscall+0x128 > > Apr 22 03:19:08 ot29 /bsd: lock order data w1 -> w2 missing > > Unfortunately we don't see the backtrace for the reverse lock order. > So it is hard to say something sensible. Without more information I'd > say that taking "&so->so_rcv.sb_lock" before "&map->lock" is the > correct lock order. >
I suspect the same issue for so_snd. > > Apr 22 03:22:27 ot29 /bsd: uid 0 on > > /mnt/regress-nfs-client/fstest_3372ae0ca77c9470440ef577e4f5e16e: file > > system full > > Apr 22 03:22:30 ot29 /bsd: uid 0 on > > /mnt/regress-nfs-client/fstest_632a6ba698de06560b4c93617b00808d: out of > > inodes > > > > According to timestamp it is regress/sys/ffs. > > make -C /usr/src/regress/sys/ffs/nfs run-chmod > > triggers it. > > > > I already reported in a thread on tech@, but the issue is independent > > of the diff over there. Let's start a fresh discussion. > > > > bluhm > > > > >