- DBG("Consumer mkdir %s in session %" PRIu64,
- msg.u.mkdir.path,
- msg.u.mkdir.session_id);
- ret = lttng_consumer_mkdir(msg.u.mkdir.path,
- msg.u.mkdir.uid,
- msg.u.mkdir.gid,
- msg.u.mkdir.relayd_id);
- if (ret < 0) {
- ERR("consumer mkdir failed");
- ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
+ const struct lttng_credentials credentials = {
+ .uid = msg.u.create_trace_chunk.credentials.value.uid,
+ .gid = msg.u.create_trace_chunk.credentials.value.gid,
+ };
+ const bool is_local_trace =
+ !msg.u.create_trace_chunk.relayd_id.is_set;
+ const uint64_t relayd_id =
+ msg.u.create_trace_chunk.relayd_id.value;
+ const char *chunk_override_name =
+ *msg.u.create_trace_chunk.override_name ?
+ msg.u.create_trace_chunk.override_name :
+ NULL;
+ struct lttng_directory_handle *chunk_directory_handle = NULL;
+
+ /*
+ * The session daemon will only provide a chunk directory file
+ * descriptor for local traces.
+ */
+ if (is_local_trace) {
+ int chunk_dirfd;
+
+ /* Acnowledge the reception of the command. */
+ ret = consumer_send_status_msg(sock,
+ LTTCOMM_CONSUMERD_SUCCESS);
+ if (ret < 0) {
+ /* Somehow, the session daemon is not responding anymore. */
+ goto end_nosignal;
+ }
+
+ /*
+ * Receive trace chunk domain dirfd.
+ */
+ ret = lttcomm_recv_fds_unix_sock(sock, &chunk_dirfd, 1);
+ if (ret != sizeof(chunk_dirfd)) {
+ ERR("Failed to receive trace chunk domain directory file descriptor");
+ goto error_fatal;
+ }
+
+ DBG("Received trace chunk domain directory fd (%d)",
+ chunk_dirfd);
+ chunk_directory_handle = lttng_directory_handle_create_from_dirfd(
+ chunk_dirfd);
+ if (!chunk_directory_handle) {
+ ERR("Failed to initialize chunk domain directory handle from directory file descriptor");
+ if (close(chunk_dirfd)) {
+ PERROR("Failed to close chunk directory file descriptor");
+ }
+ goto error_fatal;
+ }