projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use free running metadata channel key between sessiond and kernel consumer
[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 f8dcd718fc3cb73ce14d3ce5c5dc84a4a72800e4..47833dc8bd9b7fc011153ed3cfa4109134644504 100644
(file)
--- a/
src/bin/lttng-sessiond/kernel.c
+++ b/
src/bin/lttng-sessiond/kernel.c
@@
-34,6
+34,12
@@
#include "kern-modules.h"
#include "utils.h"
#include "kern-modules.h"
#include "utils.h"
+/*
+ * Key used to reference a channel between the sessiond and the consumer. This
+ * is only read and updated with the session_list lock held.
+ */
+static uint64_t next_kernel_channel_key;
+
/*
* Add context on a kernel channel.
*
/*
* Add context on a kernel channel.
*
@@
-169,8
+175,10
@@
int kernel_create_channel(struct ltt_kernel_session *session,
cds_list_add(&lkc->list, &session->channel_list.head);
session->channel_count++;
lkc->session = session;
cds_list_add(&lkc->list, &session->channel_list.head);
session->channel_count++;
lkc->session = session;
+ lkc->key = ++next_kernel_channel_key;
- DBG("Kernel channel %s created (fd: %d)", lkc->channel->name, lkc->fd);
+ DBG("Kernel channel %s created (fd: %d, key: %" PRIu64 ")",
+ lkc->channel->name, lkc->fd, lkc->key);
return 0;
return 0;
@@
-291,7
+299,8
@@
int kernel_disable_channel(struct ltt_kernel_channel *chan)
}
chan->enabled = 0;
}
chan->enabled = 0;
- DBG("Kernel channel %s disabled (fd: %d)", chan->channel->name, chan->fd);
+ DBG("Kernel channel %s disabled (fd: %d, key: %" PRIu64 ")",
+ chan->channel->name, chan->fd, chan->key);
return 0;
return 0;
@@
-315,7
+324,8
@@
int kernel_enable_channel(struct ltt_kernel_channel *chan)
}
chan->enabled = 1;
}
chan->enabled = 1;
- DBG("Kernel channel %s enabled (fd: %d)", chan->channel->name, chan->fd);
+ DBG("Kernel channel %s enabled (fd: %d, key: %" PRIu64 ")",
+ chan->channel->name, chan->fd, chan->key);
return 0;
return 0;
@@
-525,6
+535,7
@@
int kernel_open_metadata(struct ltt_kernel_session *session)
}
lkm->fd = ret;
}
lkm->fd = ret;
+ lkm->key = ++next_kernel_channel_key;
/* Prevent fd duplication after execlp() */
ret = fcntl(lkm->fd, F_SETFD, FD_CLOEXEC);
if (ret < 0) {
/* Prevent fd duplication after execlp() */
ret = fcntl(lkm->fd, F_SETFD, FD_CLOEXEC);
if (ret < 0) {
@@
-1042,7
+1053,7
@@
int kernel_snapshot_record(struct ltt_kernel_session *ksess,
}
/* Snapshot metadata, */
}
/* Snapshot metadata, */
- ret = consumer_snapshot_channel(socket, ksess->metadata->
fd
, output,
+ ret = consumer_snapshot_channel(socket, ksess->metadata->
key
, output,
1, ksess->uid, ksess->gid,
DEFAULT_KERNEL_TRACE_DIR, wait, 0);
if (ret < 0) {
1, ksess->uid, ksess->gid,
DEFAULT_KERNEL_TRACE_DIR, wait, 0);
if (ret < 0) {
@@
-1139,7
+1150,7
@@
enum lttng_error_code kernel_clear_session(struct ltt_session *session)
assert(ksess);
assert(ksess->consumer);
assert(ksess);
assert(ksess->consumer);
- DBG("Clea
t
kernel session %s (session %" PRIu64 ")",
+ DBG("Clea
r
kernel session %s (session %" PRIu64 ")",
session->name, session->id);
rcu_read_lock();
session->name, session->id);
rcu_read_lock();
@@
-1163,6
+1174,15
@@
enum lttng_error_code kernel_clear_session(struct ltt_session *session)
}
}
}
}
+ if (!ksess->metadata) {
+ /*
+ * Nothing to do for the metadata.
+ * This is a snpashot session.
+ * The metadata is genererated on the fly.
+ */
+ continue;
+ }
+
/*
* Clear the metadata channel.
* Metadata channel is not cleared per se but we still need to
/*
* Clear the metadata channel.
* Metadata channel is not cleared per se but we still need to
This page took
0.030024 seconds
and
5
git commands to generate.