Refactoring: struct lttng_kernel_channel_buffer_ops
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 3 May 2021 15:14:39 +0000 (11:14 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 4 May 2021 14:38:33 +0000 (10:38 -0400)
Introduce public/private structures for ring buffer channel operations.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I3614d550615a4617541a292fa761bebbdf6a275a

include/lttng/events-internal.h
include/lttng/events.h
src/lttng-abi.c
src/lttng-events.c
src/lttng-ring-buffer-client.h
src/lttng-ring-buffer-event-notifier-client.h
src/lttng-ring-buffer-metadata-client.h

index f0d0b0dabd30c3eb02014fd2ec4036e9e78e424f..9a80740881d812be7fa08bc50aa1c93c5a953738 100644 (file)
@@ -243,6 +243,58 @@ struct lttng_metadata_cache {
        uint64_t version;               /* Current version of the metadata */
 };
 
+struct lttng_kernel_channel_buffer_ops_private {
+       struct lttng_kernel_channel_buffer_ops *pub;    /* Public channel buffer ops interface */
+
+       struct channel *(*channel_create)(const char *name,
+                               void *priv,
+                               void *buf_addr,
+                               size_t subbuf_size, size_t num_subbuf,
+                               unsigned int switch_timer_interval,
+                               unsigned int read_timer_interval);
+       void (*channel_destroy)(struct channel *chan);
+       struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan);
+       int (*buffer_has_read_closed_stream)(struct channel *chan);
+       void (*buffer_read_close)(struct lib_ring_buffer *buf);
+       /*
+        * packet_avail_size returns the available size in the current
+        * packet. Note that the size returned is only a hint, since it
+        * may change due to concurrent writes.
+        */
+       size_t (*packet_avail_size)(struct channel *chan);
+       wait_queue_head_t *(*get_writer_buf_wait_queue)(struct channel *chan, int cpu);
+       wait_queue_head_t *(*get_hp_wait_queue)(struct channel *chan);
+       int (*is_finalized)(struct channel *chan);
+       int (*is_disabled)(struct channel *chan);
+       int (*timestamp_begin) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *timestamp_begin);
+       int (*timestamp_end) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *timestamp_end);
+       int (*events_discarded) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *events_discarded);
+       int (*content_size) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *content_size);
+       int (*packet_size) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *packet_size);
+       int (*stream_id) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *stream_id);
+       int (*current_timestamp) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *ts);
+       int (*sequence_number) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *seq);
+       int (*instance_id) (const struct lib_ring_buffer_config *config,
+                       struct lib_ring_buffer *bufb,
+                       uint64_t *id);
+};
+
 extern struct lttng_kernel_ctx *lttng_static_ctx;
 
 static inline
index 38cb39936ae4138e8e886c4bffe5689f4391c6fc..9cc552bc97add3f0d4e56d6938652f88abf20d2b 100644 (file)
@@ -371,17 +371,9 @@ struct lttng_kernel_event_notifier {
                struct lttng_kernel_notification_ctx *notif_ctx);
 };
 
-struct lttng_channel_ops {
-       struct channel *(*channel_create)(const char *name,
-                               void *priv,
-                               void *buf_addr,
-                               size_t subbuf_size, size_t num_subbuf,
-                               unsigned int switch_timer_interval,
-                               unsigned int read_timer_interval);
-       void (*channel_destroy)(struct channel *chan);
-       struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan);
-       int (*buffer_has_read_closed_stream)(struct channel *chan);
-       void (*buffer_read_close)(struct lib_ring_buffer *buf);
+struct lttng_kernel_channel_buffer_ops {
+       struct lttng_kernel_channel_buffer_ops_private *priv;   /* Private channel buffer ops interface. */
+
        int (*event_reserve)(struct lib_ring_buffer_ctx *ctx);
        void (*event_commit)(struct lib_ring_buffer_ctx *ctx);
        void (*event_write)(struct lib_ring_buffer_ctx *ctx, const void *src,
@@ -394,43 +386,6 @@ struct lttng_channel_ops {
                             size_t len);
        void (*event_strcpy_from_user)(struct lib_ring_buffer_ctx *ctx,
                                       const char __user *src, size_t len);
-       /*
-        * packet_avail_size returns the available size in the current
-        * packet. Note that the size returned is only a hint, since it
-        * may change due to concurrent writes.
-        */
-       size_t (*packet_avail_size)(struct channel *chan);
-       wait_queue_head_t *(*get_writer_buf_wait_queue)(struct channel *chan, int cpu);
-       wait_queue_head_t *(*get_hp_wait_queue)(struct channel *chan);
-       int (*is_finalized)(struct channel *chan);
-       int (*is_disabled)(struct channel *chan);
-       int (*timestamp_begin) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *timestamp_begin);
-       int (*timestamp_end) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *timestamp_end);
-       int (*events_discarded) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *events_discarded);
-       int (*content_size) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *content_size);
-       int (*packet_size) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *packet_size);
-       int (*stream_id) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *stream_id);
-       int (*current_timestamp) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *ts);
-       int (*sequence_number) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *seq);
-       int (*instance_id) (const struct lib_ring_buffer_config *config,
-                       struct lib_ring_buffer *bufb,
-                       uint64_t *id);
 };
 
 struct lttng_counter_ops {
@@ -459,7 +414,7 @@ struct lttng_transport {
        char *name;
        struct module *owner;
        struct list_head node;
-       struct lttng_channel_ops ops;
+       struct lttng_kernel_channel_buffer_ops ops;
 };
 
 struct lttng_counter_transport {
@@ -495,7 +450,7 @@ struct lttng_channel {
        struct file *file;              /* File associated to channel */
        unsigned int free_event_id;     /* Next event ID to allocate */
        struct list_head list;          /* Channel list */
-       struct lttng_channel_ops *ops;
+       struct lttng_kernel_channel_buffer_ops *ops;
        struct lttng_transport *transport;
        struct hlist_head *sc_table;    /* for syscall tracing */
        struct hlist_head *compat_sc_table;
@@ -612,7 +567,7 @@ struct lttng_event_notifier_group {
        struct list_head enablers_head; /* List of enablers */
        struct list_head event_notifiers_head; /* List of event notifier */
        struct lttng_event_notifier_ht event_notifiers_ht; /* Hash table of event notifiers */
-       struct lttng_channel_ops *ops;
+       struct lttng_kernel_channel_buffer_ops *ops;
        struct lttng_transport *transport;
        struct channel *chan;           /* Ring buffer channel for event notifier group. */
        struct lib_ring_buffer *buf;    /* Ring buffer for event notifier group. */
index 6829c239cc991c4a9d85016843b37b7d588dc8a9..6da86d54b3ebfc60a10058572d54375ed90429b4 100644 (file)
@@ -1632,7 +1632,7 @@ int lttng_abi_open_stream(struct file *channel_file)
        int ret;
        void *stream_priv;
 
-       buf = channel->ops->buffer_read_open(channel->chan);
+       buf = channel->ops->priv->buffer_read_open(channel->chan);
        if (!buf)
                return -ENOENT;
 
@@ -1646,7 +1646,7 @@ int lttng_abi_open_stream(struct file *channel_file)
        return ret;
 
 fd_error:
-       channel->ops->buffer_read_close(buf);
+       channel->ops->priv->buffer_read_close(buf);
        return ret;
 }
 
@@ -1660,7 +1660,7 @@ int lttng_abi_open_metadata_stream(struct file *channel_file)
        struct lttng_metadata_stream *metadata_stream;
        void *stream_priv;
 
-       buf = channel->ops->buffer_read_open(channel->chan);
+       buf = channel->ops->priv->buffer_read_open(channel->chan);
        if (!buf)
                return -ENOENT;
 
@@ -1712,7 +1712,7 @@ kref_error:
 notransport:
        kfree(metadata_stream);
 nomem:
-       channel->ops->buffer_read_close(buf);
+       channel->ops->priv->buffer_read_close(buf);
        return ret;
 }
 
@@ -1725,7 +1725,7 @@ int lttng_abi_open_event_notifier_group_stream(struct file *notif_file)
        int ret;
        void *stream_priv;
 
-       buf = event_notifier_group->ops->buffer_read_open(chan);
+       buf = event_notifier_group->ops->priv->buffer_read_open(chan);
        if (!buf)
                return -ENOENT;
 
@@ -1747,7 +1747,7 @@ int lttng_abi_open_event_notifier_group_stream(struct file *notif_file)
 fd_error:
        atomic_long_dec(&notif_file->f_count);
 refcount_error:
-       event_notifier_group->ops->buffer_read_close(buf);
+       event_notifier_group->ops->priv->buffer_read_close(buf);
        return ret;
 }
 
@@ -2538,14 +2538,14 @@ unsigned int lttng_channel_poll(struct file *file, poll_table *wait)
 
        if (file->f_mode & FMODE_READ) {
                poll_wait_set_exclusive(wait);
-               poll_wait(file, channel->ops->get_hp_wait_queue(channel->chan),
+               poll_wait(file, channel->ops->priv->get_hp_wait_queue(channel->chan),
                          wait);
 
-               if (channel->ops->is_disabled(channel->chan))
+               if (channel->ops->priv->is_disabled(channel->chan))
                        return POLLERR;
-               if (channel->ops->is_finalized(channel->chan))
+               if (channel->ops->priv->is_finalized(channel->chan))
                        return POLLHUP;
-               if (channel->ops->buffer_has_read_closed_stream(channel->chan))
+               if (channel->ops->priv->buffer_has_read_closed_stream(channel->chan))
                        return POLLIN | POLLRDNORM;
                return 0;
        }
@@ -2744,7 +2744,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        struct lib_ring_buffer *buf = filp->private_data;
        struct channel *chan = buf->backend.chan;
        const struct lib_ring_buffer_config *config = &chan->backend.config;
-       const struct lttng_channel_ops *ops = chan->backend.priv_ops;
+       const struct lttng_kernel_channel_buffer_ops *ops = chan->backend.priv_ops;
        int ret;
 
        if (atomic_read(&chan->record_disabled))
@@ -2755,7 +2755,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t ts;
 
-               ret = ops->timestamp_begin(config, buf, &ts);
+               ret = ops->priv->timestamp_begin(config, buf, &ts);
                if (ret < 0)
                        goto error;
                return put_u64(ts, arg);
@@ -2764,7 +2764,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t ts;
 
-               ret = ops->timestamp_end(config, buf, &ts);
+               ret = ops->priv->timestamp_end(config, buf, &ts);
                if (ret < 0)
                        goto error;
                return put_u64(ts, arg);
@@ -2773,7 +2773,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t ed;
 
-               ret = ops->events_discarded(config, buf, &ed);
+               ret = ops->priv->events_discarded(config, buf, &ed);
                if (ret < 0)
                        goto error;
                return put_u64(ed, arg);
@@ -2782,7 +2782,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t cs;
 
-               ret = ops->content_size(config, buf, &cs);
+               ret = ops->priv->content_size(config, buf, &cs);
                if (ret < 0)
                        goto error;
                return put_u64(cs, arg);
@@ -2791,7 +2791,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t ps;
 
-               ret = ops->packet_size(config, buf, &ps);
+               ret = ops->priv->packet_size(config, buf, &ps);
                if (ret < 0)
                        goto error;
                return put_u64(ps, arg);
@@ -2800,7 +2800,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t si;
 
-               ret = ops->stream_id(config, buf, &si);
+               ret = ops->priv->stream_id(config, buf, &si);
                if (ret < 0)
                        goto error;
                return put_u64(si, arg);
@@ -2809,7 +2809,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t ts;
 
-               ret = ops->current_timestamp(config, buf, &ts);
+               ret = ops->priv->current_timestamp(config, buf, &ts);
                if (ret < 0)
                        goto error;
                return put_u64(ts, arg);
@@ -2818,7 +2818,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t seq;
 
-               ret = ops->sequence_number(config, buf, &seq);
+               ret = ops->priv->sequence_number(config, buf, &seq);
                if (ret < 0)
                        goto error;
                return put_u64(seq, arg);
@@ -2827,7 +2827,7 @@ static long lttng_stream_ring_buffer_ioctl(struct file *filp,
        {
                uint64_t id;
 
-               ret = ops->instance_id(config, buf, &id);
+               ret = ops->priv->instance_id(config, buf, &id);
                if (ret < 0)
                        goto error;
                return put_u64(id, arg);
@@ -2848,7 +2848,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        struct lib_ring_buffer *buf = filp->private_data;
        struct channel *chan = buf->backend.chan;
        const struct lib_ring_buffer_config *config = &chan->backend.config;
-       const struct lttng_channel_ops *ops = chan->backend.priv_ops;
+       const struct lttng_kernel_channel_buffer_ops *ops = chan->backend.priv_ops;
        int ret;
 
        if (atomic_read(&chan->record_disabled))
@@ -2859,7 +2859,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t ts;
 
-               ret = ops->timestamp_begin(config, buf, &ts);
+               ret = ops->priv->timestamp_begin(config, buf, &ts);
                if (ret < 0)
                        goto error;
                return put_u64(ts, arg);
@@ -2868,7 +2868,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t ts;
 
-               ret = ops->timestamp_end(config, buf, &ts);
+               ret = ops->priv->timestamp_end(config, buf, &ts);
                if (ret < 0)
                        goto error;
                return put_u64(ts, arg);
@@ -2877,7 +2877,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t ed;
 
-               ret = ops->events_discarded(config, buf, &ed);
+               ret = ops->priv->events_discarded(config, buf, &ed);
                if (ret < 0)
                        goto error;
                return put_u64(ed, arg);
@@ -2886,7 +2886,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t cs;
 
-               ret = ops->content_size(config, buf, &cs);
+               ret = ops->priv->content_size(config, buf, &cs);
                if (ret < 0)
                        goto error;
                return put_u64(cs, arg);
@@ -2895,7 +2895,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t ps;
 
-               ret = ops->packet_size(config, buf, &ps);
+               ret = ops->priv->packet_size(config, buf, &ps);
                if (ret < 0)
                        goto error;
                return put_u64(ps, arg);
@@ -2904,7 +2904,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t si;
 
-               ret = ops->stream_id(config, buf, &si);
+               ret = ops->priv->stream_id(config, buf, &si);
                if (ret < 0)
                        goto error;
                return put_u64(si, arg);
@@ -2913,7 +2913,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t ts;
 
-               ret = ops->current_timestamp(config, buf, &ts);
+               ret = ops->priv->current_timestamp(config, buf, &ts);
                if (ret < 0)
                        goto error;
                return put_u64(ts, arg);
@@ -2922,7 +2922,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t seq;
 
-               ret = ops->sequence_number(config, buf, &seq);
+               ret = ops->priv->sequence_number(config, buf, &seq);
                if (ret < 0)
                        goto error;
                return put_u64(seq, arg);
@@ -2931,7 +2931,7 @@ static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp,
        {
                uint64_t id;
 
-               ret = ops->instance_id(config, buf, &id);
+               ret = ops->priv->instance_id(config, buf, &id);
                if (ret < 0)
                        goto error;
                return put_u64(id, arg);
index 4cb0f037e174e8aea12dfca0d2cb6a47368d2a1e..172513f3d0cff3c31ddc7c612ef64a28e7e7ba72 100644 (file)
@@ -291,7 +291,7 @@ struct lttng_event_notifier_group *lttng_event_notifier_group_create(void)
         * notifications.
         */
        event_notifier_group->ops = &transport->ops;
-       event_notifier_group->chan = transport->ops.channel_create(
+       event_notifier_group->chan = transport->ops.priv->channel_create(
                        transport_name, event_notifier_group, NULL,
                        subbuf_size, num_subbuf, switch_timer_interval,
                        read_timer_interval);
@@ -422,7 +422,7 @@ void lttng_event_notifier_group_destroy(
                event_notifier_group->error_counter = NULL;
        }
 
-       event_notifier_group->ops->channel_destroy(event_notifier_group->chan);
+       event_notifier_group->ops->priv->channel_destroy(event_notifier_group->chan);
        module_put(event_notifier_group->transport->owner);
        list_del(&event_notifier_group->node);
 
@@ -758,7 +758,7 @@ struct lttng_channel *lttng_channel_create(struct lttng_session *session,
         * headers. Therefore the "chan" information used as input
         * should be already accessible.
         */
-       chan->chan = transport->ops.channel_create(transport_name,
+       chan->chan = transport->ops.priv->channel_create(transport_name,
                        chan, buf_addr, subbuf_size, num_subbuf,
                        switch_timer_interval, read_timer_interval);
        if (!chan->chan)
@@ -790,7 +790,7 @@ active:
 static
 void _lttng_channel_destroy(struct lttng_channel *chan)
 {
-       chan->ops->channel_destroy(chan->chan);
+       chan->ops->priv->channel_destroy(chan->chan);
        module_put(chan->transport->owner);
        list_del(&chan->list);
        lttng_kernel_destroy_context(chan->ctx);
@@ -2879,7 +2879,7 @@ int lttng_metadata_output_channel(struct lttng_metadata_stream *stream,
        if (!len)
                goto end;
        reserve_len = min_t(size_t,
-                       stream->transport->ops.packet_avail_size(chan),
+                       stream->transport->ops.priv->packet_avail_size(chan),
                        len);
        lib_ring_buffer_ctx_init(&ctx, chan, reserve_len,
                        sizeof(char), NULL);
index cec656af5a7c20898c8b8db61226902dcf5edc0a..8fa62073005f315e129a5a2bd0c7576cbce1092c 100644 (file)
@@ -720,12 +720,29 @@ static struct lttng_transport lttng_relay_transport = {
        .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING,
        .owner = THIS_MODULE,
        .ops = {
-               .channel_create = _channel_create,
-               .channel_destroy = lttng_channel_destroy,
-               .buffer_read_open = lttng_buffer_read_open,
-               .buffer_has_read_closed_stream =
-                       lttng_buffer_has_read_closed_stream,
-               .buffer_read_close = lttng_buffer_read_close,
+               .priv = __LTTNG_COMPOUND_LITERAL(struct lttng_kernel_channel_buffer_ops_private, {
+                       .pub = &lttng_relay_transport.ops,
+                       .channel_create = _channel_create,
+                       .channel_destroy = lttng_channel_destroy,
+                       .buffer_read_open = lttng_buffer_read_open,
+                       .buffer_has_read_closed_stream =
+                               lttng_buffer_has_read_closed_stream,
+                       .buffer_read_close = lttng_buffer_read_close,
+                       .packet_avail_size = NULL,      /* Would be racy anyway */
+                       .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue,
+                       .get_hp_wait_queue = lttng_get_hp_wait_queue,
+                       .is_finalized = lttng_is_finalized,
+                       .is_disabled = lttng_is_disabled,
+                       .timestamp_begin = client_timestamp_begin,
+                       .timestamp_end = client_timestamp_end,
+                       .events_discarded = client_events_discarded,
+                       .content_size = client_content_size,
+                       .packet_size = client_packet_size,
+                       .stream_id = client_stream_id,
+                       .current_timestamp = client_current_timestamp,
+                       .sequence_number = client_sequence_number,
+                       .instance_id = client_instance_id,
+               }),
                .event_reserve = lttng_event_reserve,
                .event_commit = lttng_event_commit,
                .event_write = lttng_event_write,
@@ -733,20 +750,6 @@ static struct lttng_transport lttng_relay_transport = {
                .event_memset = lttng_event_memset,
                .event_strcpy = lttng_event_strcpy,
                .event_strcpy_from_user = lttng_event_strcpy_from_user,
-               .packet_avail_size = NULL,      /* Would be racy anyway */
-               .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue,
-               .get_hp_wait_queue = lttng_get_hp_wait_queue,
-               .is_finalized = lttng_is_finalized,
-               .is_disabled = lttng_is_disabled,
-               .timestamp_begin = client_timestamp_begin,
-               .timestamp_end = client_timestamp_end,
-               .events_discarded = client_events_discarded,
-               .content_size = client_content_size,
-               .packet_size = client_packet_size,
-               .stream_id = client_stream_id,
-               .current_timestamp = client_current_timestamp,
-               .sequence_number = client_sequence_number,
-               .instance_id = client_instance_id,
        },
 };
 
index 9bc0f9671a113066a23ca74aac69f443433b74cf..3b9dbfb7e02b24739f3f2a8696103886b81af631 100644 (file)
@@ -400,32 +400,35 @@ static struct lttng_transport lttng_relay_transport = {
        .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING,
        .owner = THIS_MODULE,
        .ops = {
-               .channel_create = _channel_create,
-               .channel_destroy = lttng_channel_destroy,
-               .buffer_read_open = lttng_buffer_read_open,
-               .buffer_has_read_closed_stream =
-                       lttng_buffer_has_read_closed_stream,
-               .buffer_read_close = lttng_buffer_read_close,
+               .priv = __LTTNG_COMPOUND_LITERAL(struct lttng_kernel_channel_buffer_ops_private, {
+                       .pub = &lttng_relay_transport.ops,
+                       .channel_create = _channel_create,
+                       .channel_destroy = lttng_channel_destroy,
+                       .buffer_read_open = lttng_buffer_read_open,
+                       .buffer_has_read_closed_stream =
+                               lttng_buffer_has_read_closed_stream,
+                       .buffer_read_close = lttng_buffer_read_close,
+                       .packet_avail_size = lttng_packet_avail_size,
+                       .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue,
+                       .get_hp_wait_queue = lttng_get_hp_wait_queue,
+                       .is_finalized = lttng_is_finalized,
+                       .is_disabled = lttng_is_disabled,
+                       .timestamp_begin = client_timestamp_begin,
+                       .timestamp_end = client_timestamp_end,
+                       .events_discarded = client_events_discarded,
+                       .content_size = client_content_size,
+                       .packet_size = client_packet_size,
+                       .stream_id = client_stream_id,
+                       .current_timestamp = client_current_timestamp,
+                       .sequence_number = client_sequence_number,
+                       .instance_id = client_instance_id,
+               }),
                .event_reserve = lttng_event_reserve,
                .event_commit = lttng_event_commit,
                .event_write_from_user = lttng_event_write_from_user,
                .event_memset = lttng_event_memset,
                .event_write = lttng_event_write,
                .event_strcpy = lttng_event_strcpy,
-               .packet_avail_size = lttng_packet_avail_size,
-               .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue,
-               .get_hp_wait_queue = lttng_get_hp_wait_queue,
-               .is_finalized = lttng_is_finalized,
-               .is_disabled = lttng_is_disabled,
-               .timestamp_begin = client_timestamp_begin,
-               .timestamp_end = client_timestamp_end,
-               .events_discarded = client_events_discarded,
-               .content_size = client_content_size,
-               .packet_size = client_packet_size,
-               .stream_id = client_stream_id,
-               .current_timestamp = client_current_timestamp,
-               .sequence_number = client_sequence_number,
-               .instance_id = client_instance_id,
        },
 };
 
index f697cafd107d0ca11064bfda9f43f7800540a52f..ab393c8e6abe097c361dd6429ff0078c9f3d2e12 100644 (file)
@@ -398,32 +398,35 @@ static struct lttng_transport lttng_relay_transport = {
        .name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING,
        .owner = THIS_MODULE,
        .ops = {
-               .channel_create = _channel_create,
-               .channel_destroy = lttng_channel_destroy,
-               .buffer_read_open = lttng_buffer_read_open,
-               .buffer_has_read_closed_stream =
-                       lttng_buffer_has_read_closed_stream,
-               .buffer_read_close = lttng_buffer_read_close,
+               .priv = __LTTNG_COMPOUND_LITERAL(struct lttng_kernel_channel_buffer_ops_private, {
+                       .pub = &lttng_relay_transport.ops,
+                       .channel_create = _channel_create,
+                       .channel_destroy = lttng_channel_destroy,
+                       .buffer_read_open = lttng_buffer_read_open,
+                       .buffer_has_read_closed_stream =
+                               lttng_buffer_has_read_closed_stream,
+                       .buffer_read_close = lttng_buffer_read_close,
+                       .packet_avail_size = lttng_packet_avail_size,
+                       .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue,
+                       .get_hp_wait_queue = lttng_get_hp_wait_queue,
+                       .is_finalized = lttng_is_finalized,
+                       .is_disabled = lttng_is_disabled,
+                       .timestamp_begin = client_timestamp_begin,
+                       .timestamp_end = client_timestamp_end,
+                       .events_discarded = client_events_discarded,
+                       .content_size = client_content_size,
+                       .packet_size = client_packet_size,
+                       .stream_id = client_stream_id,
+                       .current_timestamp = client_current_timestamp,
+                       .sequence_number = client_sequence_number,
+                       .instance_id = client_instance_id,
+               }),
                .event_reserve = lttng_event_reserve,
                .event_commit = lttng_event_commit,
                .event_write_from_user = lttng_event_write_from_user,
                .event_memset = lttng_event_memset,
                .event_write = lttng_event_write,
                .event_strcpy = lttng_event_strcpy,
-               .packet_avail_size = lttng_packet_avail_size,
-               .get_writer_buf_wait_queue = lttng_get_writer_buf_wait_queue,
-               .get_hp_wait_queue = lttng_get_hp_wait_queue,
-               .is_finalized = lttng_is_finalized,
-               .is_disabled = lttng_is_disabled,
-               .timestamp_begin = client_timestamp_begin,
-               .timestamp_end = client_timestamp_end,
-               .events_discarded = client_events_discarded,
-               .content_size = client_content_size,
-               .packet_size = client_packet_size,
-               .stream_id = client_stream_id,
-               .current_timestamp = client_current_timestamp,
-               .sequence_number = client_sequence_number,
-               .instance_id = client_instance_id,
        },
 };
 
This page took 0.042525 seconds and 4 git commands to generate.