projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
trace_kernel_create_event() now returns an error code
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
kernel.c
diff --git
a/src/bin/lttng-sessiond/kernel.c
b/src/bin/lttng-sessiond/kernel.c
index 2b59fe09d3b19924993b08849b5360d5d8eeac9e..8a4652aecf4f548658f716d63aa0a71b0e1e3661 100644
(file)
--- a/
src/bin/lttng-sessiond/kernel.c
+++ b/
src/bin/lttng-sessiond/kernel.c
@@
-201,60
+201,73
@@
int kernel_create_event(struct lttng_event *ev,
char *filter_expression,
struct lttng_filter_bytecode *filter)
{
char *filter_expression,
struct lttng_filter_bytecode *filter)
{
- int ret;
+ int err, fd;
+ enum lttng_error_code ret;
struct ltt_kernel_event *event;
assert(ev);
assert(channel);
/* We pass ownership of filter_expression and filter */
struct ltt_kernel_event *event;
assert(ev);
assert(channel);
/* We pass ownership of filter_expression and filter */
- event = trace_kernel_create_event(ev, filter_expression,
- filter);
- if (event == NULL) {
- ret = -1;
+ ret = trace_kernel_create_event(ev, filter_expression,
+ filter, &event);
+ if (ret != LTTNG_OK) {
goto error;
}
goto error;
}
-
ret
= kernctl_create_event(channel->fd, event->event);
- if (
ret
< 0) {
- switch (-
ret
) {
+
fd
= kernctl_create_event(channel->fd, event->event);
+ if (
fd
< 0) {
+ switch (-
fd
) {
case EEXIST:
case EEXIST:
+ ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
case ENOSYS:
WARN("Event type not implemented");
break;
case ENOSYS:
WARN("Event type not implemented");
+ ret = LTTNG_ERR_KERN_EVENT_ENOSYS;
break;
case ENOENT:
WARN("Event %s not found!", ev->name);
break;
case ENOENT:
WARN("Event %s not found!", ev->name);
+ ret = LTTNG_ERR_KERN_ENABLE_FAIL;
break;
default:
break;
default:
+ ret = LTTNG_ERR_KERN_ENABLE_FAIL;
PERROR("create event ioctl");
}
goto free_event;
}
event->type = ev->type;
PERROR("create event ioctl");
}
goto free_event;
}
event->type = ev->type;
- event->fd =
ret
;
+ event->fd =
fd
;
/* Prevent fd duplication after execlp() */
/* Prevent fd duplication after execlp() */
-
ret
= fcntl(event->fd, F_SETFD, FD_CLOEXEC);
- if (
ret
< 0) {
+
err
= fcntl(event->fd, F_SETFD, FD_CLOEXEC);
+ if (
err
< 0) {
PERROR("fcntl session fd");
}
if (filter) {
PERROR("fcntl session fd");
}
if (filter) {
- ret = kernctl_filter(event->fd, filter);
- if (ret) {
+ err = kernctl_filter(event->fd, filter);
+ if (err < 0) {
+ switch (-err) {
+ case ENOMEM:
+ ret = LTTNG_ERR_FILTER_NOMEM;
+ break;
+ default:
+ ret = LTTNG_ERR_FILTER_INVAL;
+ break;
+ }
goto filter_error;
}
}
goto filter_error;
}
}
-
ret
= kernctl_enable(event->fd);
- if (
ret
< 0) {
- switch (-
ret
) {
+
err
= kernctl_enable(event->fd);
+ if (
err
< 0) {
+ switch (-
err
) {
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
default:
PERROR("enable kernel event");
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
default:
PERROR("enable kernel event");
+ ret = LTTNG_ERR_KERN_ENABLE_FAIL;
break;
}
goto enable_error;
break;
}
goto enable_error;
@@
-990,6
+1003,8
@@
int kernel_snapshot_record(struct ltt_kernel_session *ksess,
struct consumer_socket *socket;
struct lttng_ht_iter iter;
struct ltt_kernel_metadata *saved_metadata;
struct consumer_socket *socket;
struct lttng_ht_iter iter;
struct ltt_kernel_metadata *saved_metadata;
+ struct ltt_session *session;
+ uint64_t trace_archive_id;
assert(ksess);
assert(ksess->consumer);
assert(ksess);
assert(ksess->consumer);
@@
-997,6
+1012,12
@@
int kernel_snapshot_record(struct ltt_kernel_session *ksess,
DBG("Kernel snapshot record started");
DBG("Kernel snapshot record started");
+ session = session_find_by_id(ksess->id);
+ assert(session);
+ assert(pthread_mutex_trylock(&session->lock));
+ assert(session_trylock_list());
+ trace_archive_id = session->current_archive_id;
+
/* Save current metadata since the following calls will change it. */
saved_metadata = ksess->metadata;
saved_metadata_fd = ksess->metadata_stream_fd;
/* Save current metadata since the following calls will change it. */
saved_metadata = ksess->metadata;
saved_metadata_fd = ksess->metadata_stream_fd;
@@
-1044,7
+1065,8
@@
int kernel_snapshot_record(struct ltt_kernel_session *ksess,
ret = consumer_snapshot_channel(socket, chan->key, output, 0,
ksess->uid, ksess->gid,
DEFAULT_KERNEL_TRACE_DIR, wait,
ret = consumer_snapshot_channel(socket, chan->key, output, 0,
ksess->uid, ksess->gid,
DEFAULT_KERNEL_TRACE_DIR, wait,
- nb_packets_per_stream);
+ nb_packets_per_stream,
+ trace_archive_id);
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
(void) kernel_consumer_destroy_metadata(socket,
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
(void) kernel_consumer_destroy_metadata(socket,
@@
-1056,7
+1078,8
@@
int kernel_snapshot_record(struct ltt_kernel_session *ksess,
/* Snapshot metadata, */
ret = consumer_snapshot_channel(socket, ksess->metadata->key, output,
1, ksess->uid, ksess->gid,
/* Snapshot metadata, */
ret = consumer_snapshot_channel(socket, ksess->metadata->key, output,
1, ksess->uid, ksess->gid,
- DEFAULT_KERNEL_TRACE_DIR, wait, 0);
+ DEFAULT_KERNEL_TRACE_DIR, wait, 0,
+ trace_archive_id);
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
goto error_consumer;
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
goto error_consumer;
@@
-1190,7
+1213,7
@@
int kernel_rotate_session(struct ltt_session *session)
ksess->uid, ksess->gid, ksess->consumer,
ksess->consumer->subdir,
/* is_metadata_channel */ false,
ksess->uid, ksess->gid, ksess->consumer,
ksess->consumer->subdir,
/* is_metadata_channel */ false,
- session->
rotate_count
,
+ session->
current_archive_id
,
&session->rotate_pending_relay);
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
&session->rotate_pending_relay);
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
@@
-1205,7
+1228,7
@@
int kernel_rotate_session(struct ltt_session *session)
ksess->uid, ksess->gid, ksess->consumer,
ksess->consumer->subdir,
/* is_metadata_channel */ true,
ksess->uid, ksess->gid, ksess->consumer,
ksess->consumer->subdir,
/* is_metadata_channel */ true,
- session->
rotate_count
,
+ session->
current_archive_id
,
&session->rotate_pending_relay);
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
&session->rotate_pending_relay);
if (ret < 0) {
ret = LTTNG_ERR_KERN_CONSUMER_FAIL;
This page took
0.025964 seconds
and
4
git commands to generate.