On 17 Jun, Chris Shenton wrote: > Don Lewis <truckman_at_FreeBSD.org> writes: > >> If you have another machine and a null modem cable you can redirect the >> system console of the machine to be debugged to a serial port and run >> some comm software on the other machine so that you can capture all the >> output from ddb. > > OK, I'll give that a shot, probably tomorrow. > > >> At the ddb prompt, you can do a "tr" command to get a stack trace, >> which is likely to be very helpful in pointing out the offending >> code. > > Just saw it again, did a tr. From chicken-scratch notes, the last > bits are: > > VOP_GETVOBJECT(...) > do_sendfile(...) > sendfile(...) > syscall(...) > Xint0x80_syscall... > --- syscall( 393, FreeBSD ELF32, sendfile) ... > > The next time it dropped into ddb, same "sendfile" thing. Try the very untested patch below ... > The main services I'm running are qmail, apache, and NFS. Also > tftp, rarpd, lpd, sshd, bootparamd ... oh, well, I guess I'm running > a bunch of stuff here. :-( Not sure which one, if any, this would be. > > Unless sendfile() is something in the OS? It's a system call, and I believe apache uses it. > > I'll have to dig up a nullmodem and grab console output. I realise > I'm not giving enough detailed info to be very helpful here. It's good enough to squash one bug. I don't know if it will solve your problem, though. >> If you are running the NFS *client* code on this machine, there is one >> lock assertion that is easy to trigger. > > In my kernel config I have this, because a diskless box uses the same > kernel, but my /etc/fstab doesn't mount anyone else's NFS exports. You won't trigger the the lock violation in the NFS client code unless you actually mount a file system from another machine using NFS and actually do some I/O on it. Here's the patch: Index: uipc_syscalls.c =================================================================== RCS file: /home/ncvs/src/sys/kern/uipc_syscalls.c,v retrieving revision 1.150 diff -u -r1.150 uipc_syscalls.c --- uipc_syscalls.c 12 Jun 2003 05:52:09 -0000 1.150 +++ uipc_syscalls.c 18 Jun 2003 03:14:42 -0000 _at__at_ -1775,10 +1775,13 _at__at_ */ if ((error = fgetvp_read(td, uap->fd, &vp)) != 0) goto done; + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); if (vp->v_type != VREG || VOP_GETVOBJECT(vp, &obj) != 0) { error = EINVAL; + VOP_UNLOCK(vp, 0, td); goto done; } + VOP_UNLOCK(vp, 0, td); if ((error = fgetsock(td, uap->s, &so, NULL)) != 0) goto done; if (so->so_type != SOCK_STREAM) {Received on Tue Jun 17 2003 - 18:20:53 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:12 UTC