+/*
+ * We tolerate no failure in this function (if one happens, we print a dmesg
+ * error, but cannot return any error, because the channel information is
+ * invariant.
+ */
+static
+void lttng_metadata_create_events(struct file *channel_file)
+{
+ struct ltt_channel *channel = channel_file->private_data;
+ char *event_name = "lttng_metadata";
+ const struct lttng_event_desc *event_desc;
+ struct ltt_event *event;
+ int ret;
+
+ event_desc = ltt_event_get(event_name);
+ if (!event_desc) {
+ ret = -ENOENT;
+ goto get_error;
+ }
+ /*
+ * We tolerate no failure path after event creation. It will stay
+ * invariant for the rest of the session.
+ */
+ event = ltt_event_create(channel, event_name, LTTNG_KERNEL_TRACEPOINTS,
+ event_desc, NULL);
+ if (!event) {
+ goto create_error;
+ ret = -EEXIST;
+ }
+ return;
+
+create_error:
+ ltt_event_put(event_desc);
+get_error:
+ WARN_ON(1);
+ return; /* not allowed to return error */
+}
+
+static