diff options
author | 2020-06-11 09:06:29 +0000 | |
---|---|---|
committer | 2020-06-11 09:06:29 +0000 | |
commit | dce8220486ca42245e62b5bd6a29b8581952e5a2 (patch) | |
tree | ed5f575c46ad578c24473ade21d14986998f64bc /sys/kern/spec_vnops.c | |
parent | Make iwx(4) update the Tx ring byte count table. (diff) | |
download | wireguard-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.c | 17 |
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); } |