While reviewing the all current .d_poll() functions I found those two which are incoherent with the rest.
- Most of the devices return POLLERR when the device is no longer valid, for whatever reason, uhid(4) returns POLLHUP in one of the cases. - fusepoll() return EINVAL which isn't a POLL* value, here again POLLERR is what is wanted. ok? Index: dev/usb/uhid.c =================================================================== RCS file: /cvs/src/sys/dev/usb/uhid.c,v retrieving revision 1.77 diff -u -p -r1.77 uhid.c --- dev/usb/uhid.c 20 Feb 2020 16:56:52 -0000 1.77 +++ dev/usb/uhid.c 2 Apr 2020 18:08:03 -0000 @@ -420,7 +420,7 @@ uhidpoll(dev_t dev, int events, struct p return (POLLERR); if (usbd_is_dying(sc->sc_hdev.sc_udev)) - return (POLLHUP); + return (POLLERR); s = splusb(); if (events & (POLLOUT | POLLWRNORM)) Index: miscfs/fuse/fuse_device.c =================================================================== RCS file: /cvs/src/sys/miscfs/fuse/fuse_device.c,v retrieving revision 1.31 diff -u -p -r1.31 fuse_device.c --- miscfs/fuse/fuse_device.c 20 Feb 2020 16:56:52 -0000 1.31 +++ miscfs/fuse/fuse_device.c 2 Apr 2020 18:08:03 -0000 @@ -523,7 +523,7 @@ fusepoll(dev_t dev, int events, struct p fd = fuse_lookup(minor(dev)); if (fd == NULL) - return (EINVAL); + return (POLLERR); if (events & (POLLIN | POLLRDNORM)) if (!SIMPLEQ_EMPTY(&fd->fd_fbufs_in))