diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2017-10-03 16:15:03 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-10-03 17:54:24 -0700 |
commit | 6818600ff094ca255a7fe31838ad50c29656c3c5 (patch) | |
tree | 43ed936d9217cf7b097f8b44e55200844151e35d /kernel/task_work.c | |
parent | a1b2289cef92ef0e9a92afcd2e1ea71d5bcaaf64 (diff) |
mm,compaction: serialize waitqueue_active() checks (for real)
Andrea brought to my attention that the L->{L,S} guarantees are
completely bogus for this case. I was looking at the diagram, from the
offending commit, when that _is_ the race, we had the load reordered
already.
What we need is at least S->L semantics, thus simply use
wq_has_sleeper() to serialize the call for good.
Link: http://lkml.kernel.org/r/20170914175313.GB811@linux-80c1.suse
Fixes: 46acef048a6 (mm,compaction: serialize waitqueue_active() checks)
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Reported-by: Andrea Parri <parri.andrea@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/task_work.c')
0 files changed, 0 insertions, 0 deletions