* [PATCH] change current_is_single_threaded() to use for_each_thread()
@ 2015-10-05 12:00 Oleg Nesterov
2015-10-07 9:39 ` David Howells
0 siblings, 1 reply; 4+ messages in thread
From: Oleg Nesterov @ 2015-10-05 12:00 UTC (permalink / raw)
To: Andrew Morton; +Cc: David Howells, linux-kernel
Change current_is_single_threaded() to use for_each_thread() rather
than deprecated while_each_thread().
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
lib/is_single_threaded.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/lib/is_single_threaded.c b/lib/is_single_threaded.c
index bd2bea9..391fd23 100644
--- a/lib/is_single_threaded.c
+++ b/lib/is_single_threaded.c
@@ -36,8 +36,7 @@ bool current_is_single_threaded(void)
if (unlikely(p == task->group_leader))
continue;
- t = p;
- do {
+ for_each_thread(p, t) {
if (unlikely(t->mm == mm))
goto found;
if (likely(t->mm))
@@ -48,7 +47,7 @@ bool current_is_single_threaded(void)
* forked before exiting.
*/
smp_rmb();
- } while_each_thread(p, t);
+ }
}
ret = true;
found:
--
1.5.5.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] change current_is_single_threaded() to use for_each_thread()
2015-10-05 12:00 [PATCH] change current_is_single_threaded() to use for_each_thread() Oleg Nesterov
@ 2015-10-07 9:39 ` David Howells
2015-10-07 11:54 ` Oleg Nesterov
0 siblings, 1 reply; 4+ messages in thread
From: David Howells @ 2015-10-07 9:39 UTC (permalink / raw)
To: Oleg Nesterov; +Cc: dhowells, Andrew Morton, linux-kernel
Oleg Nesterov <oleg@redhat.com> wrote:
> Change current_is_single_threaded() to use for_each_thread() rather
> than deprecated while_each_thread().
Wouldn't the old way be more efficient, given there's always going to be at
least one thread? Granted, it's not much of an efficiency boost...
David
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] change current_is_single_threaded() to use for_each_thread()
2015-10-07 9:39 ` David Howells
@ 2015-10-07 11:54 ` Oleg Nesterov
2015-10-07 13:50 ` David Howells
0 siblings, 1 reply; 4+ messages in thread
From: Oleg Nesterov @ 2015-10-07 11:54 UTC (permalink / raw)
To: David Howells; +Cc: Andrew Morton, linux-kernel
On 10/07, David Howells wrote:
>
> Oleg Nesterov <oleg@redhat.com> wrote:
>
> > Change current_is_single_threaded() to use for_each_thread() rather
> > than deprecated while_each_thread().
>
> Wouldn't the old way be more efficient, given there's always going to be at
> least one thread?
Yes, unfortunately. Before this change (in the likely case) we never
do next_thread(), after this patch we always do list_first_entry().
> Granted, it's not much of an efficiency boost...
Yes, and while_each_thread() is buggy. See the changelog in 0c740d0afc
"introduce for_each_thread() to replace the buggy while_each_thread().
Yes, the race is almost purely theoretical, but still.
To clarify, we had some "real" bugs fixed by s/while_each_thread/
for_each_thread/, but only because while_each_thread() was used wrongly.
for_each_thread() is more safe, it only needs the stable task_struct.
Oleg.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] change current_is_single_threaded() to use for_each_thread()
2015-10-07 11:54 ` Oleg Nesterov
@ 2015-10-07 13:50 ` David Howells
0 siblings, 0 replies; 4+ messages in thread
From: David Howells @ 2015-10-07 13:50 UTC (permalink / raw)
To: Oleg Nesterov; +Cc: dhowells, Andrew Morton, linux-kernel
Oleg Nesterov <oleg@redhat.com> wrote:
> To clarify, we had some "real" bugs fixed by s/while_each_thread/
> for_each_thread/, but only because while_each_thread() was used wrongly.
> for_each_thread() is more safe, it only needs the stable task_struct.
Fair enough.
David
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-10-07 13:50 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-05 12:00 [PATCH] change current_is_single_threaded() to use for_each_thread() Oleg Nesterov
2015-10-07 9:39 ` David Howells
2015-10-07 11:54 ` Oleg Nesterov
2015-10-07 13:50 ` David Howells
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).