NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: lib/53003: Problem with rust library using kqueue
The following reply was made to PR lib/53003; it has been noted by GNATS.
From: Mickael Viey <m.viey%wanadoo.fr@localhost>
To: gnats-bugs%NetBSD.org@localhost, lib-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
netbsd-bugs%netbsd.org@localhost
Cc:
Subject: Re: lib/53003: Problem with rust library using kqueue
Date: Sun, 11 Feb 2018 21:58:44 +0100
> The following reply was made to PR lib/53003; it has been noted by GNATS.
>
> From: christos%zoulas.com@localhost (Christos Zoulas)
> To: Mickael Viey <m.viey%wanadoo.fr@localhost>, gnats-bugs%NetBSD.org@localhost,
> lib-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
> netbsd-bugs%netbsd.org@localhost
> Cc:
> Subject: Re: lib/53003: Problem with rust library using kqueue
> Date: Sun, 11 Feb 2018 11:08:19 -0500
>
> On Feb 11, 10:23am, m.viey%wanadoo.fr@localhost (Mickael Viey) wrote:
> -- Subject: Re: lib/53003: Problem with rust library using kqueue
>
> | Ok, the NetBSD in that I tried this code is my usual working machine,
> | but I will try on a VM ASAP.
> |
> | Do you know why this code fails on the stable version? (a link to a PR
> | by example)
> |
> | Thanks for your reply(, and sorry for the typing error on uname.)
>
> I am not sure. One thing to try is to apply the diff from
> of kern_event.c HEAD to the netbsd-7 branch and change f_kqueue -> f_data
> so that it compiles. The other thing you can do is to ktrace the binary
> to see where it fails. My guess is that if fails because of the following.
> Try it, and if it works I will ask for a pullup.
>
> christos
>
> revision 1.198
> date: 2017-07-01 16:07:00 -0400; author: christos; state: Exp; lines: +33 -2;
> Provide EVFILT_WRITE; this is what FreeBSD does and go wants it.
> Makes go unit tests pass.
>
>
> Index: genfs_vnops.c
> ===================================================================
> RCS file: /cvsroot/src/sys/miscfs/genfs/genfs_vnops.c,v
> retrieving revision 1.197
> retrieving revision 1.198
> diff -u -r1.197 -r1.198
> --- genfs_vnops.c 4 Jun 2017 08:02:26 -0000 1.197
> +++ genfs_vnops.c 1 Jul 2017 20:07:00 -0000 1.198
> @@ -1,4 +1,4 @@
> -/* $NetBSD: genfs_vnops.c,v 1.197 2017/06/04 08:02:26 hannken Exp $ */
> +/* $NetBSD: genfs_vnops.c,v 1.198 2017/07/01 20:07:00 christos Exp $ */
>
> /*-
> * Copyright (c) 2008 The NetBSD Foundation, Inc.
> @@ -57,7 +57,7 @@
> */
>
> #include <sys/cdefs.h>
> -__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.197 2017/06/04 08:02:26 hannken Exp $");
> +__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.198 2017/07/01 20:07:00 christos Exp $");
>
> #include <sys/param.h>
> #include <sys/systm.h>
> @@ -500,6 +500,32 @@
> }
>
> static int
> +filt_genfswrite(struct knote *kn, long hint)
> +{
> + struct vnode *vp = (struct vnode *)kn->kn_hook;
> +
> + /*
> + * filesystem is gone, so set the EOF flag and schedule
> + * the knote for deletion.
> + */
> + switch (hint) {
> + case NOTE_REVOKE:
> + KASSERT(mutex_owned(vp->v_interlock));
> + kn->kn_flags |= (EV_EOF | EV_ONESHOT);
> + return (1);
> + case 0:
> + mutex_enter(vp->v_interlock);
> + kn->kn_data = 0;
> + mutex_exit(vp->v_interlock);
> + return 1;
> + default:
> + KASSERT(mutex_owned(vp->v_interlock));
> + kn->kn_data = 0;
> + return 1;
> + }
> +}
> +
> +static int
> filt_genfsvnode(struct knote *kn, long hint)
> {
> struct vnode *vp = (struct vnode *)kn->kn_hook;
> @@ -530,6 +556,8 @@
>
> static const struct filterops genfsread_filtops =
> { 1, NULL, filt_genfsdetach, filt_genfsread };
> +static const struct filterops genfswrite_filtops =
> + { 1, NULL, filt_genfsdetach, filt_genfswrite };
> static const struct filterops genfsvnode_filtops =
> { 1, NULL, filt_genfsdetach, filt_genfsvnode };
>
> @@ -549,6 +577,9 @@
> case EVFILT_READ:
> kn->kn_fop = &genfsread_filtops;
> break;
> + case EVFILT_WRITE:
> + kn->kn_fop = &genfswrite_filtops;
> + break;
> case EVFILT_VNODE:
> kn->kn_fop = &genfsvnode_filtops;
> break;
>
Thanks, I will try to adapt the rust library to NetBSD way. I got a a
mio copy from github. With your indications, an kqueue documentation
reading I will perhaps find how I can work around this bug. In the same
time I will try to understand what is different in NetBSD kqueue
compared to FreeBSD.
Best,
Mickaël
Home |
Main Index |
Thread Index |
Old Index