5.1-CURRENT hangs on disk i/o? sysctl_old_user() non-sleepable
locks
StefanEßer
se at freebsd.org
Thu Jun 19 02:31:53 PDT 2003
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
> >> @@ -1775,10 +1775,13 @@
> >> */
> >> 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
@@ -64,8 +64,10 @@
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")
More information about the freebsd-current
mailing list