Fix: silence 'non-consumed' message for non-started sessions
authorMichael Jeanson <mjeanson@efficios.com>
Mon, 28 Oct 2024 20:02:59 +0000 (16:02 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 4 Nov 2024 23:01:08 +0000 (18:01 -0500)
Destroying a session with at least one enabled event and which has never
been started will currently result in an error message in the kernel log
about 'non-consumed data' for each of the per-cpu buffer. This happens
because a packet header is created in the buffer but never consumed if
the session is not started.

Add a check in the buffer cleanup code to avoid printing 'non-consumed
data' errors for buffers associated with a session taht was never
started.

Change-Id: I1358e1ae49d03544a961515b97b115a488434e27
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/ringbuffer/frontend_types.h
src/lib/ringbuffer/ring_buffer_frontend.c
src/lttng-events.c

index 07d23be260147ae8c56a233f599b30cc0c996c7b..4158033d03d21bfccf9ee29ba5c14c90ffbbace7 100644 (file)
@@ -71,6 +71,7 @@ struct lttng_kernel_ring_buffer_channel {
        int finalized;                          /* Has channel been finalized */
        struct channel_iter iter;               /* Channel read-side iterator */
        struct kref ref;                        /* Reference count */
+       int been_active;                        /* Tracing was started at least once */
 };
 
 /* Per-subbuffer commit counters used on the hot path */
index 468d3bbc1863f98ef09d387636ea09212f986685..e5984e67742cf68692b333232f769894641b32a3 100644 (file)
@@ -1502,7 +1502,13 @@ void lib_ring_buffer_print_buffer_errors(struct lttng_kernel_ring_buffer *buf,
         */
        write_offset = v_read(config, &buf->offset);
        cons_offset = atomic_long_read(&buf->consumed);
-       if (write_offset != cons_offset)
+
+       /*
+        * Only print errors if the session associated with the buffer has been
+        * active, otherwise destroying an un-started session results in errors
+        * because of the un-consumed packet header present in the buffer.
+        */
+       if (chan->been_active && write_offset != cons_offset)
                printk(KERN_DEBUG
                       "LTTng: ring buffer %s, cpu %d: "
                       "non-consumed data\n"
index 314fb3ecb02b397f47d51e164dc4166aef259e70..e3ce3e746a1c2997e2bea77a222590d0ab1f38e1 100644 (file)
@@ -499,6 +499,8 @@ int lttng_session_enable(struct lttng_kernel_session *session)
        list_for_each_entry(chan_priv, &session->priv->chan, node) {
                if (chan_priv->channel_type != METADATA_CHANNEL)
                        lib_ring_buffer_clear_quiescent_channel(chan_priv->rb_chan);
+
+               WRITE_ONCE(chan_priv->rb_chan->been_active, 1);
        }
 
        WRITE_ONCE(session->active, 1);
This page took 0.02931 seconds and 4 git commands to generate.