TODO list item - multiple poll waitqueues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux