Hi, This has been on my TODO list for a while, just haven't gotten around to it. The issue is that some drivers use multiple waitqueues for poll, which doesn't work with POLL_ADD. io_poll_queue_proc() checks for this and fails it: static void io_poll_queue_proc(struct file *file, struct wait_queue_head *head, struct poll_table_struct *p) { struct io_poll_table *pt = container_of(p, struct io_poll_table, pt); if (unlikely(pt->req->poll.head)) { pt->error = -EINVAL; return; } pt->error = 0; pt->req->poll.head = head; add_wait_queue(head, &pt->req->poll.wait); } since we just have the one waitqueue on the io_uring side. Most notably affected are TTYs, I've also noticed that /dev/random does the same thing, and recently pipes as well. This is a problem for event handlers, in that not all file types work reliably with POLL_ADD. Note that this also affects the aio poll implementation, unsurprisingly. If anyone has the inclination to look into this, that'd be great. -- Jens Axboe