Re: 5.1-CURRENT hangs on disk i/o? sysctl_old_user() non-sleepable locks

From: Stefan Eßer <se_at_freebsd.org>
Date: Thu, 19 Jun 2003 11:31:46 +0200
On 2003-06-18 20:41 -0700, Don Lewis <truckman_at_freebsd.org> wrote:
> On 18 Jun, Chris Shenton wrote:
> > Don Lewis <truckman_at_FreeBSD.org> writes:
> > 
> >> Try the very untested patch below ...
> > 
> >> RCS file: /home/ncvs/src/sys/kern/uipc_syscalls.c,v
> >> retrieving revision 1.150
> >> Try the very untested patch below ...
> >> 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);
> > 
> > Tried it, rebuilt kernel, rebooted, no affect :-(
> > 
> > You were correct about apache using it.  Doing a simple
> > 
> >   fetch http://pectopah/
> > 
> > causes the error, dropping me into ddb if panic enabled. A "tr" shows
> > the same trace as I submitted yesterday :-(
> 
> Wierd ... I just tested the patch with ftpd which also uses sendfile()
> and didn't get any complaints from DEBUG_VFS_LOCKS.

Not sure whether the following applies, but I think the patch
should be commited anyway:

In PR kern/46652 I reported, that DEBUG_VFS_LOCKS does never
check the **vpp parameters. A patch is included in the PR and
it does generate the missing tests.

I asked for feedback on the hackers mail list (IIRC), but did
not get any replies. 

Any objections against me committing the patch now ?

(A different fix is mentioned in the PR, the patch I suggested
was the minimal change to the code which made it work, the
alternative seems cleaner to me ...) Please read PR kern/46652 !


If nobody complains, I'll do the commit tomorrow.

Regards, STefan


Index: /usr/src/sys/tools/vnode_if.awk
===================================================================
RCS file: /usr/cvs/src/sys/tools/vnode_if.awk,v
retrieving revision 1.37
diff -u -u -4 -r1.37 vnode_if.awk
--- /usr/src/sys/tools/vnode_if.awk	26 Sep 2002 04:48:43 -0000	1.37
+++ /usr/src/sys/tools/vnode_if.awk	31 Dec 2002 13:37:20 -0000
_at__at_ -64,8 +64,10 _at__at_
 function printh(s) {print s > hfile;}
 
 function add_debug_code(name, arg, pos)
 {
+	if (arg == "vpp")
+		arg = "*vpp";
 	if (lockdata[name, arg, pos]) {
 		printh("\tASSERT_VI_UNLOCKED("arg", \""uname"\");");
 		# Add assertions for locking
 		if (lockdata[name, arg, pos] == "L")
Received on Thu Jun 19 2003 - 00:31:53 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:12 UTC