From: Al Viro <viro@ZenIV.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christoph Hellwig <hch@lst.de>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Network Development <netdev@vger.kernel.org>, LKP <lkp@01.org>
Subject: Re: [PATCH 6/6] fs: replace f_ops->get_poll_head with a static ->f_poll_head pointer
Date: Thu, 28 Jun 2018 22:30:27 +0100 [thread overview]
Message-ID: <20180628213027.GK30522@ZenIV.linux.org.uk> (raw)
In-Reply-To: <CA+55aFxfkD9ozw77j-bshReLJN4dN2GEdW+R-LkxztceCW6OTg@mail.gmail.com>
On Thu, Jun 28, 2018 at 02:11:17PM -0700, Linus Torvalds wrote:
> On Thu, Jun 28, 2018 at 1:28 PM Al Viro <viro@zeniv.linux.org.uk> wrote:
> >
> >
> > Sure, but...
> >
> > static __poll_t binder_poll(struct file *filp,
> > struct poll_table_struct *wait)
> > {
> > struct binder_proc *proc = filp->private_data;
> > struct binder_thread *thread = NULL;
> > bool wait_for_proc_work;
> >
> > thread = binder_get_thread(proc);
> > if (!thread)
> > return POLLERR;
>
> That's actually fine.
>
> In particular, it's ok to *not* add yourself to the wait-queues if you
> already return the value that you will always return.
Sure (and that's one of the problems I mentioned with ->get_poll_head() model).
But in this case I was refering to GFP_KERNEL allocation down there.
> > And that's hardly unique - we have instances playing with timers,
> > allocations, whatnot. Even straight mutex_lock(), as in
>
> So?
>
> Again, locking is permitted. It's not great, but it's not against the rules.
Me: a *LOT* of ->poll() instances only block in __pollwait() called (indirectly)
on the first pass.
You: They are *all* supposed to do it.
Me: <examples of instances that block elsewhere>
I'm not saying that blocking on other things is a bug; some of such *are* bogus,
but a lot aren't really broken. What I said is that in a lot of cases we really
have hard "no blocking other than in callback" (and on subsequent passes there's
no callback at all). Which is just about perfect for AIO purposes, so *IF* we
go for "new method just for AIO, those who don't have it can take a hike", we might
as well indicate that "can take a hike" in some way (be it opt-in or opt-out) and
use straight unchanged ->poll(), with alternative callback.
Looks like we were talking past each other for the last couple of rounds...
> So none of the things you point to are excuses for changing interfaces
> or adding any flags.
> Anybody who thinks "select cannot block" or "->poll() musn't block" is
> just confused. It has *never* been about that. It waits asynchronously
> for IO, but it may well wait synchronously for locks or memory or just
> "lazy implementation".
Obviously. I *do* understand how poll() works, really.
> The fact is, those interface changes were just broken shit. They were
> confused. I don't actually believe that AIO even needed them.
>
> Christoph, do you have a test program for IOCB_CMD_POLL and what it's
> actually supposed to do?
>
> Because I think that what it can do is simply to do the ->poll() calls
> outside the iocb locks, and then just attach the poll table to the
> kioctx afterwards.
I'd do a bit more - embed the first poll_table_entry into poll iocb itself,
so that the instances that use only one queue wouldn't need any allocations
at all.
next prev parent reply other threads:[~2018-06-28 21:30 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-28 14:20 [RFC] replace ->get_poll_head with a waitqueue pointer in struct file Christoph Hellwig
2018-06-28 14:20 ` [PATCH 1/6] net: remove sock_poll_busy_flag Christoph Hellwig
2018-06-28 14:20 ` [PATCH 2/6] net: remove bogus RCU annotations on socket.wq Christoph Hellwig
2018-06-28 14:20 ` [PATCH 3/6] net: don't detour through struct to find the poll head Christoph Hellwig
2018-06-28 14:20 ` [PATCH 4/6] net: remove busy polling from sock_get_poll_head Christoph Hellwig
2018-06-28 14:20 ` [PATCH 5/6] net: remove sock_poll_busy_loop Christoph Hellwig
2018-06-28 14:20 ` [PATCH 6/6] fs: replace f_ops->get_poll_head with a static ->f_poll_head pointer Christoph Hellwig
2018-06-28 16:40 ` Linus Torvalds
2018-06-28 18:17 ` Al Viro
2018-06-28 19:31 ` Linus Torvalds
2018-06-28 20:28 ` Al Viro
2018-06-28 20:37 ` Al Viro
2018-06-28 21:16 ` Linus Torvalds
2018-06-28 21:11 ` Linus Torvalds
2018-06-28 21:30 ` Al Viro [this message]
2018-06-28 21:39 ` Linus Torvalds
2018-06-28 22:20 ` Al Viro
2018-06-28 22:35 ` Linus Torvalds
2018-06-28 22:49 ` Al Viro
2018-06-28 22:55 ` Linus Torvalds
2018-06-28 23:37 ` Al Viro
2018-06-29 0:13 ` Linus Torvalds
2018-06-29 13:29 ` Christoph Hellwig
2018-06-29 13:40 ` Linus Torvalds
2018-06-29 13:28 ` Christoph Hellwig
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 \
--in-reply-to=20180628213027.GK30522@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=lkp@01.org \
--cc=netdev@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/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;
as well as URLs for NNTP newsgroup(s).