aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/trace/trace.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index c3946a6df34..c61ee85c50b 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -2336,7 +2336,8 @@ static int tracing_resize_ring_buffer(unsigned long size)
/*
* If kernel or user changes the size of the ring buffer
- * it get completed.
+ * we use the size that was given, and we can forget about
+ * expanding it later.
*/
ring_buffer_expanded = 1;
@@ -2351,8 +2352,20 @@ static int tracing_resize_ring_buffer(unsigned long size)
r = ring_buffer_resize(global_trace.buffer,
global_trace.entries);
if (r < 0) {
- /* AARGH! We are left with different
- * size max buffer!!!! */
+ /*
+ * AARGH! We are left with different
+ * size max buffer!!!!
+ * The max buffer is our "snapshot" buffer.
+ * When a tracer needs a snapshot (one of the
+ * latency tracers), it swaps the max buffer
+ * with the saved snap shot. We succeeded to
+ * update the size of the main buffer, but failed to
+ * update the size of the max buffer. But when we tried
+ * to reset the main buffer to the original size, we
+ * failed there too. This is very unlikely to
+ * happen, but if it does, warn and kill all
+ * tracing.
+ */
WARN_ON(1);
tracing_disabled = 1;
}