Fix: reintroduce lazy kernel modules load, fix empty syscall list
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 577647a1c074597ecd7935e5e3d1e3a37e2d9b32..82d92070398119fd60fce36adb55d17eb2aafc19 100644 (file)
@@ -1252,7 +1252,7 @@ error:
 /*
  * Start a kernel session by opening all necessary streams.
  */
-static int start_kernel_session(struct ltt_kernel_session *ksess, int wpipe)
+static int start_kernel_session(struct ltt_kernel_session *ksess)
 {
        int ret;
        struct ltt_kernel_channel *kchan;
@@ -1304,7 +1304,7 @@ static int start_kernel_session(struct ltt_kernel_session *ksess, int wpipe)
        }
 
        /* Quiescent wait after starting trace */
-       kernel_wait_quiescent(wpipe);
+       kernel_wait_quiescent();
 
        ksess->active = 1;
 
@@ -1336,7 +1336,7 @@ int cmd_disable_channel(struct ltt_session *session,
                        goto error;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
                break;
        }
        case LTTNG_DOMAIN_UST:
@@ -1394,7 +1394,7 @@ int cmd_track_pid(struct ltt_session *session, enum lttng_domain_type domain,
                        goto error;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
                break;
        }
        case LTTNG_DOMAIN_UST:
@@ -1445,7 +1445,7 @@ int cmd_untrack_pid(struct ltt_session *session, enum lttng_domain_type domain,
                        goto error;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
                break;
        }
        case LTTNG_DOMAIN_UST:
@@ -1525,7 +1525,7 @@ int cmd_enable_channel(struct ltt_session *session,
        switch (domain->type) {
        case LTTNG_DOMAIN_KERNEL:
        {
-               if (kernel_supports_ring_buffer_snapshot_sample_positions(kernel_tracer_fd) != 1) {
+               if (kernel_supports_ring_buffer_snapshot_sample_positions() != 1) {
                        /* Sampling position of buffer is not supported */
                        WARN("Kernel tracer does not support buffer monitoring. "
                                        "Setting the monitor interval timer to 0 "
@@ -1576,7 +1576,7 @@ int cmd_enable_channel(struct ltt_session *session,
                        goto error;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
                break;
        }
        case LTTNG_DOMAIN_UST:
@@ -1711,7 +1711,7 @@ int cmd_disable_event(struct ltt_session *session,
                        goto error_unlock;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
                break;
        }
        case LTTNG_DOMAIN_UST:
@@ -2161,7 +2161,7 @@ static int _cmd_enable_event(struct ltt_session *session,
                        goto error;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
                break;
        }
        case LTTNG_DOMAIN_UST:
@@ -2429,7 +2429,7 @@ ssize_t cmd_list_tracepoints(enum lttng_domain_type domain,
 
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
-               nb_events = kernel_list_events(kernel_tracer_fd, events);
+               nb_events = kernel_list_events(events);
                if (nb_events < 0) {
                        ret = LTTNG_ERR_KERN_LIST_FAIL;
                        goto error;
@@ -2588,8 +2588,7 @@ int cmd_start_trace(struct ltt_session *session)
                goto error;
        }
 
-       if (session->output_traces && !session->current_trace_chunk &&
-                       session_output_supports_trace_chunks(session)) {
+       if (session->output_traces && !session->current_trace_chunk) {
                struct lttng_trace_chunk *trace_chunk;
 
                trace_chunk = session_create_new_trace_chunk(
@@ -2610,7 +2609,7 @@ int cmd_start_trace(struct ltt_session *session)
        /* Kernel tracing */
        if (ksession != NULL) {
                DBG("Start kernel tracing session %s", session->name);
-               ret = start_kernel_session(ksession, kernel_tracer_fd);
+               ret = start_kernel_session(ksession);
                if (ret != LTTNG_OK) {
                        goto error;
                }
@@ -2687,7 +2686,7 @@ int cmd_stop_trace(struct ltt_session *session)
                        goto error;
                }
 
-               kernel_wait_quiescent(kernel_tracer_fd);
+               kernel_wait_quiescent();
 
                /* Flush metadata after stopping (if exists) */
                if (ksession->metadata_stream_fd >= 0) {
@@ -3199,8 +3198,7 @@ int cmd_destroy_session(struct ltt_session *session,
                 if (reply_context) {
                        reply_context->implicit_rotation_on_destroy = true;
                 }
-        } else if (session->has_been_started && session->current_trace_chunk &&
-                               session_output_supports_trace_chunks(session)) {
+        } else if (session->has_been_started && session->current_trace_chunk) {
                /*
                 * The user has not triggered a session rotation. However, to
                 * ensure all data has been consumed, the session is rotated
@@ -4478,6 +4476,8 @@ enum lttng_error_code snapshot_record(struct ltt_session *session,
                                session->kernel_session->consumer;
                snapshot_kernel_consumer_output =
                                consumer_copy_output(snapshot_output->consumer);
+               strcpy(snapshot_kernel_consumer_output->chunk_path,
+                       snapshot_chunk_name);
                ret = consumer_copy_sockets(snapshot_kernel_consumer_output,
                                original_kernel_consumer_output);
                if (ret < 0) {
@@ -4498,6 +4498,8 @@ enum lttng_error_code snapshot_record(struct ltt_session *session,
                original_ust_consumer_output = session->ust_session->consumer;
                snapshot_ust_consumer_output =
                                consumer_copy_output(snapshot_output->consumer);
+               strcpy(snapshot_ust_consumer_output->chunk_path,
+                       snapshot_chunk_name);
                ret = consumer_copy_sockets(snapshot_ust_consumer_output,
                                original_ust_consumer_output);
                if (ret < 0) {
@@ -4564,7 +4566,7 @@ enum lttng_error_code snapshot_record(struct ltt_session *session,
        }
 
        if (session_close_trace_chunk(
-                           session, session->current_trace_chunk, NULL)) {
+                           session, session->current_trace_chunk, NULL, NULL)) {
                /*
                 * Don't goto end; make sure the chunk is closed for the session
                 * to allow future snapshots.
@@ -4787,7 +4789,7 @@ int cmd_rotate_session(struct ltt_session *session,
        }
 
        /* Unsupported feature in lttng-relayd before 2.11. */
-       if (session->consumer->type == CONSUMER_DST_NET &&
+       if (!quiet_rotation && session->consumer->type == CONSUMER_DST_NET &&
                        (session->consumer->relay_major_version == 2 &&
                        session->consumer->relay_minor_version < 11)) {
                cmd_ret = LTTNG_ERR_ROTATION_NOT_AVAILABLE_RELAY;
@@ -4853,7 +4855,8 @@ int cmd_rotate_session(struct ltt_session *session,
                        quiet_rotation ?
                                        NULL :
                                        &((enum lttng_trace_chunk_command_type){
-                                                       LTTNG_TRACE_CHUNK_COMMAND_TYPE_MOVE_TO_COMPLETED}));
+                                                       LTTNG_TRACE_CHUNK_COMMAND_TYPE_MOVE_TO_COMPLETED}),
+                       session->last_chunk_path);
        if (ret) {
                cmd_ret = LTTNG_ERR_CLOSE_TRACE_CHUNK_FAIL_CONSUMER;
                goto error;
@@ -4974,6 +4977,16 @@ int cmd_rotate_get_info(struct ltt_session *session,
                                        sizeof(info_return->location.local.absolute_path);
                        info_return->location_type =
                                        (int8_t) LTTNG_TRACE_ARCHIVE_LOCATION_TYPE_LOCAL;
+                       fmt_ret = asprintf(&chunk_path,
+                                       "%s/" DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY "/%s",
+                                       session_get_base_path(session),
+                                       session->last_archived_chunk_name);
+                       if (fmt_ret == -1) {
+                               PERROR("Failed to format the path of the last archived trace chunk");
+                               info_return->status = LTTNG_ROTATION_STATUS_ERROR;
+                               cmd_ret = LTTNG_ERR_UNK;
+                               goto end;
+                       }
                        break;
                case CONSUMER_DST_NET:
                        current_tracing_path_reply =
@@ -4999,20 +5012,17 @@ int cmd_rotate_get_info(struct ltt_session *session,
                                        &info_return->location.relay.ports.data);
                        info_return->location_type =
                                        (int8_t) LTTNG_TRACE_ARCHIVE_LOCATION_TYPE_RELAY;
+                       chunk_path = strdup(session->last_chunk_path);
+                       if (!chunk_path) {
+                               ERR("Failed to allocate the path of the last archived trace chunk");
+                               info_return->status = LTTNG_ROTATION_STATUS_ERROR;
+                               cmd_ret = LTTNG_ERR_UNK;
+                               goto end;
+                       }
                        break;
                default:
                        abort();
                }
-               fmt_ret = asprintf(&chunk_path,
-                               "%s/" DEFAULT_ARCHIVED_TRACE_CHUNKS_DIRECTORY "/%s",
-                               session_get_base_path(session),
-                               session->last_archived_chunk_name);
-               if (fmt_ret == -1) {
-                       PERROR("Failed to format the path of the last archived trace chunk");
-                       info_return->status = LTTNG_ROTATION_STATUS_ERROR;
-                       cmd_ret = LTTNG_ERR_UNK;
-                       goto end;
-               }
 
                fmt_ret = lttng_strncpy(current_tracing_path_reply,
                                chunk_path, current_tracing_path_reply_len);
This page took 0.028129 seconds and 4 git commands to generate.