summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fb.com>2014-08-25 13:59:41 -0400
committerJiri Slaby <jslaby@suse.cz>2014-10-13 14:25:32 +0200
commit531402e06165b02cac3c5f1d5ccb1db665f0b7e0 (patch)
treeed2a06e6d9234f8b63e6d0d1b717c89bce868ff7 /Documentation
parent19c365577e5de2b3f671ad2efbe7556e1f5dcc38 (diff)
trace: Fix epoll hang when we race with new entries
commit 4ce97dbf50245227add17c83d87dc838e7ca79d0 upstream. Epoll on trace_pipe can sometimes hang in a weird case. If the ring buffer is empty when we set waiters_pending but an event shows up exactly at that moment we can miss being woken up by the ring buffers irq work. Since ring_buffer_empty() is inherently racey we will sometimes think that the buffer is not empty. So we don't get woken up and we don't think there are any events even though there were some ready when we added the watch, which makes us hang. This patch fixes this by making sure that we are actually on the wait list before we set waiters_pending, and add a memory barrier to make sure ring_buffer_empty() is going to be correct. Link: http://lkml.kernel.org/p/1408989581-23727-1-git-send-email-jbacik@fb.com Cc: Martin Lau <kafai@fb.com> Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Diffstat (limited to 'Documentation')
0 files changed, 0 insertions, 0 deletions