LTTng trace-clock: shrink kernel blacklist
[lttng-modules.git] / lttng-events.c
index 27a8f8644477be0bcf41c3732622e0e8c0f9fa57..4b891cd5ecda22e8778f5a4592f19c9e2574172f 100644 (file)
@@ -554,35 +554,43 @@ void _lttng_event_destroy(struct lttng_event *event)
  * remaining space left in packet and write, since mutual exclusion
  * protects us from concurrent writes.
  */
-int lttng_metadata_output_channel(struct lttng_channel *chan,
-               struct lttng_metadata_stream *stream)
+int lttng_metadata_output_channel(struct lttng_metadata_stream *stream,
+               struct channel *chan)
 {
        struct lib_ring_buffer_ctx ctx;
        int ret = 0;
        size_t len, reserve_len;
 
+       /*
+        * Ensure we support mutiple get_next / put sequences followed
+        * by put_next.
+        */
+       WARN_ON(stream->metadata_in < stream->metadata_out);
+       if (stream->metadata_in != stream->metadata_out)
+               return 0;
+
        len = stream->metadata_cache->metadata_written -
-               stream->metadata_cache_read;
+               stream->metadata_in;
        if (!len)
                return 0;
        reserve_len = min_t(size_t,
-                       chan->ops->packet_avail_size(chan->chan),
+                       stream->transport->ops.packet_avail_size(chan),
                        len);
-       lib_ring_buffer_ctx_init(&ctx, chan->chan, NULL, reserve_len,
+       lib_ring_buffer_ctx_init(&ctx, chan, NULL, reserve_len,
                        sizeof(char), -1);
        /*
         * If reservation failed, return an error to the caller.
         */
-       ret = chan->ops->event_reserve(&ctx, 0);
+       ret = stream->transport->ops.event_reserve(&ctx, 0);
        if (ret != 0) {
                printk(KERN_WARNING "LTTng: Metadata event reservation failed\n");
                goto end;
        }
-       chan->ops->event_write(&ctx,
-                       stream->metadata_cache->data + stream->metadata_cache_read,
+       stream->transport->ops.event_write(&ctx,
+                       stream->metadata_cache->data + stream->metadata_in,
                        reserve_len);
-       chan->ops->event_commit(&ctx);
-       stream->metadata_cache_read += reserve_len;
+       stream->transport->ops.event_commit(&ctx);
+       stream->metadata_in += reserve_len;
        ret = reserve_len;
 
 end:
This page took 0.025607 seconds and 4 git commands to generate.