X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fkernel.c;h=cedb9346cea81d29fc8eb547bbcbe769c337cc38;hb=b2543b2047a84638b3c8eb8bb7babdc8824c0a94;hp=be263943f0211a9cffdb563f0a22ddfda9e9653c;hpb=92816cc33a1add3c8276839bd6335e17423577dd;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c index be263943f..cedb9346c 100644 --- a/src/bin/lttng-sessiond/kernel.c +++ b/src/bin/lttng-sessiond/kernel.c @@ -125,6 +125,26 @@ int kernel_create_session(struct ltt_session *session, int tracer_fd) DBG("Kernel session created (fd: %d)", lks->fd); + /* + * This is necessary since the creation time is present in the session + * name when it is generated. + */ + if (session->has_auto_generated_name) { + ret = kernctl_session_set_name(lks->fd, DEFAULT_SESSION_NAME); + } else { + ret = kernctl_session_set_name(lks->fd, session->name); + } + if (ret) { + WARN("Could not set kernel session name for session %" PRIu64 " name: %s", + session->id, session->name); + } + + ret = kernctl_session_set_creation_time(lks->fd, session->creation_time); + if (ret) { + WARN("Could not set kernel session creation time for session %" PRIu64 " name: %s", + session->id, session->name); + } + return 0; error: @@ -1233,17 +1253,18 @@ void kernel_destroy_channel(struct ltt_kernel_channel *kchan) /* * Take a snapshot for a given kernel session. * - * Return 0 on success or else return a LTTNG_ERR code. + * Return LTTNG_OK on success or else return a LTTNG_ERR code. */ -int kernel_snapshot_record(struct ltt_kernel_session *ksess, +enum lttng_error_code kernel_snapshot_record(struct ltt_kernel_session *ksess, struct snapshot_output *output, int wait, uint64_t nb_packets_per_stream) { int err, ret, saved_metadata_fd; + enum lttng_error_code status = LTTNG_OK; struct consumer_socket *socket; struct lttng_ht_iter iter; struct ltt_kernel_metadata *saved_metadata; - struct ltt_session *session; + struct ltt_session *session = NULL; uint64_t trace_archive_id; assert(ksess); @@ -1266,13 +1287,13 @@ int kernel_snapshot_record(struct ltt_kernel_session *ksess, ret = kernel_open_metadata(ksess); if (ret < 0) { - ret = LTTNG_ERR_KERN_META_FAIL; + status = LTTNG_ERR_KERN_META_FAIL; goto error; } ret = kernel_open_metadata_stream(ksess); if (ret < 0) { - ret = LTTNG_ERR_KERN_META_FAIL; + status = LTTNG_ERR_KERN_META_FAIL; goto error_open_stream; } @@ -1296,19 +1317,18 @@ int kernel_snapshot_record(struct ltt_kernel_session *ksess, /* Put back the saved consumer output into the session. */ ksess->consumer = saved_output; if (ret < 0) { - ret = LTTNG_ERR_KERN_CONSUMER_FAIL; + status = LTTNG_ERR_KERN_META_FAIL; goto error_consumer; } /* For each channel, ask the consumer to snapshot it. */ cds_list_for_each_entry(chan, &ksess->channel_list.head, list) { - ret = consumer_snapshot_channel(socket, chan->key, output, 0, + status = consumer_snapshot_channel(socket, chan->key, output, 0, ksess->uid, ksess->gid, DEFAULT_KERNEL_TRACE_DIR, wait, nb_packets_per_stream, trace_archive_id); - if (ret < 0) { - ret = LTTNG_ERR_KERN_CONSUMER_FAIL; + if (status != LTTNG_OK) { (void) kernel_consumer_destroy_metadata(socket, ksess->metadata); goto error_consumer; @@ -1316,12 +1336,11 @@ int kernel_snapshot_record(struct ltt_kernel_session *ksess, } /* Snapshot metadata, */ - ret = consumer_snapshot_channel(socket, ksess->metadata->key, output, + status = consumer_snapshot_channel(socket, ksess->metadata->key, output, 1, ksess->uid, ksess->gid, DEFAULT_KERNEL_TRACE_DIR, wait, 0, trace_archive_id); - if (ret < 0) { - ret = LTTNG_ERR_KERN_CONSUMER_FAIL; + if (status != LTTNG_OK) { goto error_consumer; } @@ -1332,8 +1351,6 @@ int kernel_snapshot_record(struct ltt_kernel_session *ksess, (void) kernel_consumer_destroy_metadata(socket, ksess->metadata); } - ret = LTTNG_OK; - error_consumer: /* Close newly opened metadata stream. It's now on the consumer side. */ err = close(ksess->metadata_stream_fd); @@ -1347,9 +1364,11 @@ error: /* Restore metadata state.*/ ksess->metadata = saved_metadata; ksess->metadata_stream_fd = saved_metadata_fd; - + if (session) { + session_put(session); + } rcu_read_unlock(); - return ret; + return status; } /* @@ -1401,11 +1420,12 @@ error: /* * Rotate a kernel session. * - * Return 0 on success or else return a LTTNG_ERR code. + * Return LTTNG_OK on success or else an LTTng error code. */ -int kernel_rotate_session(struct ltt_session *session) +enum lttng_error_code kernel_rotate_session(struct ltt_session *session) { int ret; + enum lttng_error_code status = LTTNG_OK; struct consumer_socket *socket; struct lttng_ht_iter iter; struct ltt_kernel_session *ksess = session->kernel_session; @@ -1432,11 +1452,11 @@ int kernel_rotate_session(struct ltt_session *session) chan->key, session->name); ret = consumer_rotate_channel(socket, chan->key, ksess->uid, ksess->gid, ksess->consumer, - ksess->consumer->subdir, + ksess->consumer->domain_subdir, /* is_metadata_channel */ false, session->current_archive_id); if (ret < 0) { - ret = LTTNG_ERR_KERN_CONSUMER_FAIL; + status = LTTNG_ERR_KERN_CONSUMER_FAIL; goto error; } } @@ -1446,18 +1466,16 @@ int kernel_rotate_session(struct ltt_session *session) */ ret = consumer_rotate_channel(socket, ksess->metadata->key, ksess->uid, ksess->gid, ksess->consumer, - ksess->consumer->subdir, + ksess->consumer->domain_subdir, /* is_metadata_channel */ true, session->current_archive_id); if (ret < 0) { - ret = LTTNG_ERR_KERN_CONSUMER_FAIL; + status = LTTNG_ERR_KERN_CONSUMER_FAIL; goto error; } } - ret = LTTNG_OK; - error: rcu_read_unlock(); - return ret; + return status; }