From: Andy Lutomirski <luto@amacapital.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: mtk.manpages@gmail.com, "Paton J. Lewis" <palewis@adobe.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Jason Baron <jbaron@redhat.com>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
Paul Holland <pholland@adobe.com>,
Davide Libenzi <davidel@xmailserver.org>,
libc-alpha@sourceware.org, Linux API <linux-api@vger.kernel.org>,
paulmck@linux.vnet.ibm.com
Subject: Re: [PATCH v2] epoll: Support for disabling items, and a self-test app.
Date: Thu, 18 Oct 2012 11:05:11 -0700 [thread overview]
Message-ID: <508044D7.7070005@mit.edu> (raw)
In-Reply-To: <20121017163004.fb9de1b3.akpm@linux-foundation.org>
[cc Paul McKenney, who is probably the leading expert on these things]
On 10/17/2012 04:30 PM, Andrew Morton wrote:
> On Tue, 16 Oct 2012 17:12:57 +0200
> "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com> wrote:
>
>> On Thu, Aug 23, 2012 at 11:15 PM, Paton J. Lewis <palewis@adobe.com> wrote:
>>> From: "Paton J. Lewis" <palewis@adobe.com>
>>>
>>> Enhanced epoll_ctl to support EPOLL_CTL_DISABLE, which disables an epoll item.
>>> If epoll_ctl doesn't return -EBUSY in this case, it is then safe to delete the
>>> epoll item in a multi-threaded environment. Also added a new test_epoll self-
>>> test app to both demonstrate the need for this feature and test it.
>>
>> (There's a lot of background missing from this version of the patch
>> that was included in the previous version
>> [http://thread.gmane.org/gmane.linux.kernel/1311457]. It helps to
>> include the full rationale with a revised patch--best not to assume
>> that someone has the context of past mails when reading a revised
>> patch.)
>>
>> I've taken a look at this patch as it currently stands in 3.7-rc1, and
>> done a bit of testing. (By the way, the test program
>> tools/testing/selftests/epoll/test_epoll.c does not compile...)
>
> Thanks for this. You raise significant issues. If we can't get these
> fully resolved over the next month or so, we should revert the patch so
> this new API doesn't get released in 3.7. I have queued a patch to do
> this and shall maintain it while I watch developments...
I can't shake the feeling that EPOLL_CTL_DISABLE is solving a
non-problem, or, more precisely, that there should be a perfectly good
userspace solution with no kernel changes.
Unless something is rather buggy in kernel land (and I don't think it
is), once EPOLL_CTL_DEL has returned, no call to epoll_wait that starts
*after* EPOLL_CTL_DEL finishes will return that object. This suggests
an RCU-like approach: once EPOLL_CTL_DEL has returned and every thread
has returned from an epoll_wait call that started after the
EPOLL_CTL_DEL returns, then the data structure can be safely freed.
In pseudocode:
delete(fd, pdata) {
pdata->dead = true;
EPOLL_CTL_DEL(fd);
rcu_call(delete pdata);
}
wait() {
epoll_wait;
for each event pdata {
if (pdata->gone) continue;
process the event;
}
rcu_this_is_a_grace_period();
}
Of course, these are not normal grace periods and would need to be
tracked separately. (The optimal data structure to do this without
killing scalability is not obvious. urcu presumably implements such a
thing.)
Am I right?
--Andy
next prev parent reply other threads:[~2012-10-18 18:05 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-23 21:15 [PATCH v2] epoll: Support for disabling items, and a self-test app Paton J. Lewis
[not found] ` <1345756535-8372-1-git-send-email-palewis-dv/VyGpifdQAvxtiuMwx3w@public.gmane.org>
2012-10-16 15:12 ` Michael Kerrisk (man-pages)
2012-10-16 15:12 ` Michael Kerrisk (man-pages)
2012-10-17 23:30 ` Andrew Morton
2012-10-18 18:05 ` Andy Lutomirski [this message]
2012-10-19 13:03 ` Paolo Bonzini
2012-10-19 13:29 ` Paul Holland
[not found] ` <CCA6A06A.10264%pholland-dv/VyGpifdQAvxtiuMwx3w@public.gmane.org>
2012-10-19 13:39 ` Paolo Bonzini
2012-10-19 13:39 ` Paolo Bonzini
[not found] ` <5085D159.4090703@adobe.com>
2012-10-23 13:26 ` Michael Kerrisk (man-pages)
[not found] ` <CAKgNAkg0R2LwfpF8beCkawTfPu7oj_DDaDxf2VJ+xB6UTgRSaw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-23 17:23 ` Paton J. Lewis
2012-10-23 17:23 ` Paton J. Lewis
[not found] ` <5086D27F.1000007-dv/VyGpifdQAvxtiuMwx3w@public.gmane.org>
2012-10-23 19:15 ` Andreas Jaeger
2012-10-23 19:15 ` Andreas Jaeger
2012-10-26 0:25 ` Paton J. Lewis
2012-10-24 1:01 ` Paton J. Lewis
2012-10-24 1:01 ` Paton J. Lewis
[not found] ` <50873DFA.5010205-dv/VyGpifdQAvxtiuMwx3w@public.gmane.org>
2012-10-25 10:23 ` Michael Kerrisk (man-pages)
2012-10-25 10:23 ` Michael Kerrisk (man-pages)
[not found] ` <CAKgNAkj=52rPitKT2b4_=dwczpfub6RQojjX4rNhFZQZHecSTA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-25 21:09 ` Paton J. Lewis
2012-10-25 21:09 ` Paton J. Lewis
2012-10-26 21:52 ` Matt Helsley
[not found] ` <20121026215242.GB19911-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2012-11-05 3:09 ` Michael Wang
2012-11-05 3:09 ` Michael Wang
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=508044D7.7070005@mit.edu \
--to=luto@amacapital.net \
--cc=akpm@linux-foundation.org \
--cc=davidel@xmailserver.org \
--cc=jbaron@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=palewis@adobe.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=pholland@adobe.com \
--cc=viro@zeniv.linux.org.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.