summaryrefslogtreecommitdiffstats
path: root/sys/kern/spec_vnops.c
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2020-06-11 09:06:29 +0000
committermpi <mpi@openbsd.org>2020-06-11 09:06:29 +0000
commitdce8220486ca42245e62b5bd6a29b8581952e5a2 (patch)
treeed5f575c46ad578c24473ade21d14986998f64bc /sys/kern/spec_vnops.c
parentMake iwx(4) update the Tx ring byte count table. (diff)
downloadwireguard-openbsd-dce8220486ca42245e62b5bd6a29b8581952e5a2.tar.xz
wireguard-openbsd-dce8220486ca42245e62b5bd6a29b8581952e5a2.zip
Make spec_kqfilter() and cttykqfilter() behave like their corresponding
poll handler if the EV_OLDAPI flag is set. ok visa@
Diffstat (limited to 'sys/kern/spec_vnops.c')
-rw-r--r--sys/kern/spec_vnops.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/kern/spec_vnops.c b/sys/kern/spec_vnops.c
index 887a7acb641..03b866c8a43 100644
--- a/sys/kern/spec_vnops.c
+++ b/sys/kern/spec_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: spec_vnops.c,v 1.100 2020/01/20 23:21:55 claudio Exp $ */
+/* $OpenBSD: spec_vnops.c,v 1.101 2020/06/11 09:06:29 mpi Exp $ */
/* $NetBSD: spec_vnops.c,v 1.29 1996/04/22 01:42:38 christos Exp $ */
/*
@@ -386,11 +386,9 @@ spec_poll(void *v)
dev_t dev;
switch (ap->a_vp->v_type) {
-
default:
return (ap->a_events &
(POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM));
-
case VCHR:
dev = ap->a_vp->v_rdev;
return (*cdevsw[major(dev)].d_poll)(dev, ap->a_events, ap->a_p);
@@ -400,12 +398,19 @@ int
spec_kqfilter(void *v)
{
struct vop_kqfilter_args *ap = v;
-
dev_t dev;
dev = ap->a_vp->v_rdev;
- if (cdevsw[major(dev)].d_kqfilter)
- return (*cdevsw[major(dev)].d_kqfilter)(dev, ap->a_kn);
+
+ switch (ap->a_vp->v_type) {
+ default:
+ if (ap->a_kn->kn_flags & EV_OLDAPI)
+ return seltrue_kqfilter(dev, ap->a_kn);
+ break;
+ case VCHR:
+ if (cdevsw[major(dev)].d_kqfilter)
+ return (*cdevsw[major(dev)].d_kqfilter)(dev, ap->a_kn);
+ }
return (EOPNOTSUPP);
}