summaryrefslogtreecommitdiffstats
path: root/sys/miscfs/deadfs
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2020-06-15 15:42:11 +0000
committermpi <mpi@openbsd.org>2020-06-15 15:42:11 +0000
commitcd7317608c2935dc76e7edbef5164cf5eec1552f (patch)
tree6581a1dcb90042a207ec9faa42a97b1c54866a1d /sys/miscfs/deadfs
parentSet __EV_HUP when the conditions matching poll(2)'s POLLUP are found. (diff)
downloadwireguard-openbsd-cd7317608c2935dc76e7edbef5164cf5eec1552f.tar.xz
wireguard-openbsd-cd7317608c2935dc76e7edbef5164cf5eec1552f.zip
Implement a simple kqfilter for deadfs matching its poll handler.
ok visa@, millert@
Diffstat (limited to 'sys/miscfs/deadfs')
-rw-r--r--sys/miscfs/deadfs/dead_vnops.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/sys/miscfs/deadfs/dead_vnops.c b/sys/miscfs/deadfs/dead_vnops.c
index 606960c726d..5a1abbc73d1 100644
--- a/sys/miscfs/deadfs/dead_vnops.c
+++ b/sys/miscfs/deadfs/dead_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dead_vnops.c,v 1.32 2020/01/20 23:21:56 claudio Exp $ */
+/* $OpenBSD: dead_vnops.c,v 1.33 2020/06/15 15:42:11 mpi Exp $ */
/* $NetBSD: dead_vnops.c,v 1.16 1996/02/13 13:12:48 mycroft Exp $ */
/*
@@ -34,6 +34,7 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/event.h>
#include <sys/time.h>
#include <sys/vnode.h>
#include <sys/lock.h>
@@ -52,6 +53,7 @@ int dead_read(void *);
int dead_write(void *);
int dead_ioctl(void *);
int dead_poll(void *);
+int dead_kqfilter(void *v);
int dead_inactive(void *);
int dead_lock(void *);
int dead_bmap(void *);
@@ -73,6 +75,7 @@ const struct vops dead_vops = {
.vop_write = dead_write,
.vop_ioctl = dead_ioctl,
.vop_poll = dead_poll,
+ .vop_kqfilter = dead_kqfilter,
.vop_fsync = nullop,
.vop_remove = dead_badop,
.vop_link = dead_badop,
@@ -167,6 +170,23 @@ dead_poll(void *v)
return (POLLHUP);
}
+int
+dead_kqfilter(void *v)
+{
+ struct vop_kqfilter_args *ap = v;
+
+ switch (ap->a_kn->kn_filter) {
+ case EVFILT_READ:
+ case EVFILT_WRITE:
+ ap->a_kn->kn_fop = &dead_filtops;
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ return (0);
+}
+
/*
* Just call the device strategy routine
*/