From: Jens Axboe <[email protected]>
To: io-uring <[email protected]>
Subject: Re: TODO list item - multiple poll waitqueues
Date: Mon, 10 Feb 2020 13:53:36 -0700 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
On 2/10/20 8:12 AM, Jens Axboe wrote:
> 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.
Of course after sending this one, I did take a look and hacked up
some support for it. Not super happy with it, but I'll send it out
for proper review and hopefully we can turn it into something that's
5.6 material.
Forgot to mention that this is particularly sucky since pipes were
recently switched to using multiple waitqueues.
https://git.kernel.dk/cgit/linux-block/log/?h=io_uring-5.6-poll
--
Jens Axboe
prev parent reply other threads:[~2020-02-10 20:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-10 15:12 TODO list item - multiple poll waitqueues Jens Axboe
2020-02-10 20:53 ` Jens Axboe [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox