From 2ca4923a713044e0bc4b66c1516c55e3b402d305 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Wed, 22 Sep 2010 18:00:03 -0700 Subject: [PATCH] kernel - Enable EVFILT_WRITE for /dev/null, /dev/zero, etc * Make both read and write kqfilters valid instead of just the read filter. This fixes issues with programs which select on stdout for writing, e.g. 'ssh -n "blah" > /dev/null'. --- sys/kern/kern_memio.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_memio.c b/sys/kern/kern_memio.c index 989b3432f3..294bf68957 100644 --- a/sys/kern/kern_memio.c +++ b/sys/kern/kern_memio.c @@ -223,7 +223,7 @@ mmrw(cdev_t dev, struct uio *uio, int flags) } case 2: /* - * minor device 2 is EOF/RATHOLE + * minor device 2 (/dev/null) is EOF/RATHOLE */ if (uio->uio_rw == UIO_READ) return (0); @@ -545,6 +545,12 @@ mm_filter_read(struct knote *kn, long hint) return (1); } +static int +mm_filter_write(struct knote *kn, long hint) +{ + return (1); +} + static void dummy_filter_detach(struct knote *kn) {} @@ -554,6 +560,9 @@ static struct filterops random_read_filtops = static struct filterops mm_read_filtops = { FILTEROP_ISFD, NULL, dummy_filter_detach, mm_filter_read }; +static struct filterops mm_write_filtops = + { FILTEROP_ISFD, NULL, dummy_filter_detach, mm_filter_write }; + int mmkqfilter(struct dev_kqfilter_args *ap) { @@ -572,6 +581,9 @@ mmkqfilter(struct dev_kqfilter_args *ap) break; } break; + case EVFILT_WRITE: + kn->kn_fop = &mm_write_filtops; + break; default: ap->a_result = EOPNOTSUPP; return (0); -- 2.41.0