On 16 Jun, Thorsten Schroeder wrote:
> Hi,
> 
> On Sun, 15 Jun 2003, Don Lewis wrote:
> 
>> > I don't know what it could be - perhaps a problem with named pipes
>> > ("lock/trigger")?
>> >
>> > You can find my ktrace output here: http://cs.so36.net/~ths/kdump.txt
> 
>> Which version of fifo_vnops.c?  If the problem is present in
>> 5.1-RELEASE, then the problem is likely to be the change made in 1.79
>> and 1.85.  If the problem didn't show up until after the 5.1-RELEASE,
>> then the problem could be the changes in 1.87 or 1.88.
> 
> FreeBSD 5.1-CURRENT #1: Thu Jun  5 19:29:29 CEST 2003
> 
> fifo_vnops.c:
> 
> $FreeBSD: src/sys/fs/fifofs/fifo_vnops.c,v 1.87 2003/06/01 06:24:32 truckman Exp $


Try upgrading to 1.88 and applying this patch:

Index: sys/fs/fifofs/fifo_vnops.c
===================================================================
RCS file: /home/ncvs/src/sys/fs/fifofs/fifo_vnops.c,v
retrieving revision 1.88
diff -u -r1.88 fifo_vnops.c
--- sys/fs/fifofs/fifo_vnops.c  13 Jun 2003 06:58:11 -0000      1.88
+++ sys/fs/fifofs/fifo_vnops.c  16 Jun 2003 08:44:20 -0000
@@ -70,7 +70,6 @@
 static int     fifo_lookup(struct vop_lookup_args *);
 static int     fifo_open(struct vop_open_args *);
 static int     fifo_close(struct vop_close_args *);
-static int     fifo_inactive(struct vop_inactive_args *);
 static int     fifo_read(struct vop_read_args *);
 static int     fifo_write(struct vop_write_args *);
 static int     fifo_ioctl(struct vop_ioctl_args *);
@@ -98,7 +97,6 @@
        { &vop_create_desc,             (vop_t *) vop_panic },
        { &vop_getattr_desc,            (vop_t *) vop_ebadf },
        { &vop_getwritemount_desc,      (vop_t *) vop_stdgetwritemount },
-       { &vop_inactive_desc,           (vop_t *) fifo_inactive },
        { &vop_ioctl_desc,              (vop_t *) fifo_ioctl },
        { &vop_kqfilter_desc,           (vop_t *) fifo_kqfilter },
        { &vop_lease_desc,              (vop_t *) vop_null },
@@ -556,32 +554,18 @@
                if (fip->fi_writers == 0)
                        socantrcvmore(fip->fi_readsock);
        }
-       VOP_UNLOCK(vp, 0, td);
-       return (0);
-}
-
-static int
-fifo_inactive(ap)
-       struct vop_inactive_args /* {
-               struct vnode *a_vp;
-               struct thread *a_td;
-       } */ *ap;
-{
-       struct vnode *vp = ap->a_vp;
-       struct fifoinfo *fip = vp->v_fifoinfo;
-
        VI_LOCK(vp);
-       if (fip != NULL && vp->v_usecount == 0) {
+       if (vp->v_usecount == 1) {
                vp->v_fifoinfo = NULL;
                VI_UNLOCK(vp);
                (void)soclose(fip->fi_readsock);
                (void)soclose(fip->fi_writesock);
                FREE(fip, M_VNODE);
-       }
-       VOP_UNLOCK(vp, 0, ap->a_td);
+       } else
+               VI_UNLOCK(vp);
+       VOP_UNLOCK(vp, 0, td);
        return (0);
 }
-
 
 /*
  * Print out internal contents of a fifo vnode.

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to