From 88076e8986dddbed302570394f9e5589a6b4d923 Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Fri, 1 Dec 2017 14:46:23 -0500 Subject: [PATCH] Make kernel tracer version global to the session daemon MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit A version check is already performed during the initialization of the kernel tracer. This patch makes the result available as a global variable in main.c in order to check for support of the kernel tracer commands required to support the rotation of sessions. Signed-off-by: Julien Desfossez Signed-off-by: Jérémie Galarneau --- src/bin/lttng-sessiond/kernel.c | 22 +++++++++++----------- src/bin/lttng-sessiond/kernel.h | 4 +++- src/bin/lttng-sessiond/main.c | 6 +++++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c index 535a5b8e8..35758e3bd 100644 --- a/src/bin/lttng-sessiond/kernel.c +++ b/src/bin/lttng-sessiond/kernel.c @@ -824,38 +824,38 @@ error: /* * Get kernel version and validate it. */ -int kernel_validate_version(int tracer_fd) +int kernel_validate_version(int tracer_fd, + struct lttng_kernel_tracer_version *version, + struct lttng_kernel_tracer_abi_version *abi_version) { int ret; - struct lttng_kernel_tracer_version version; - struct lttng_kernel_tracer_abi_version abi_version; - ret = kernctl_tracer_version(tracer_fd, &version); + ret = kernctl_tracer_version(tracer_fd, version); if (ret < 0) { ERR("Failed to retrieve the lttng-modules version"); goto error; } /* Validate version */ - if (version.major != VERSION_MAJOR) { + if (version->major != VERSION_MAJOR) { ERR("Kernel tracer major version (%d) is not compatible with lttng-tools major version (%d)", - version.major, VERSION_MAJOR); + version->major, VERSION_MAJOR); goto error_version; } - ret = kernctl_tracer_abi_version(tracer_fd, &abi_version); + ret = kernctl_tracer_abi_version(tracer_fd, abi_version); if (ret < 0) { ERR("Failed to retrieve lttng-modules ABI version"); goto error; } - if (abi_version.major != LTTNG_MODULES_ABI_MAJOR_VERSION) { + if (abi_version->major != LTTNG_MODULES_ABI_MAJOR_VERSION) { ERR("Kernel tracer ABI version (%d.%d) does not match the expected ABI major version (%d.*)", - abi_version.major, abi_version.minor, + abi_version->major, abi_version->minor, LTTNG_MODULES_ABI_MAJOR_VERSION); goto error; } DBG2("Kernel tracer version validated (%d.%d, ABI %d.%d)", - version.major, version.minor, - abi_version.major, abi_version.minor); + version->major, version->minor, + abi_version->major, abi_version->minor); return 0; error_version: diff --git a/src/bin/lttng-sessiond/kernel.h b/src/bin/lttng-sessiond/kernel.h index 1b394947b..17aede1ed 100644 --- a/src/bin/lttng-sessiond/kernel.h +++ b/src/bin/lttng-sessiond/kernel.h @@ -54,7 +54,9 @@ int kernel_start_session(struct ltt_kernel_session *session); int kernel_stop_session(struct ltt_kernel_session *session); ssize_t kernel_list_events(int tracer_fd, struct lttng_event **event_list); void kernel_wait_quiescent(int fd); -int kernel_validate_version(int tracer_fd); +int kernel_validate_version(int tracer_fd, + struct lttng_kernel_tracer_version *kernel_tracer_version, + struct lttng_kernel_tracer_abi_version *kernel_tracer_abi_version); void kernel_destroy_session(struct ltt_kernel_session *ksess); void kernel_destroy_channel(struct ltt_kernel_channel *kchan); int kernel_snapshot_record(struct ltt_kernel_session *ksess, diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 726c4e388..2923664ed 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -94,6 +94,9 @@ static int lockfile_fd = -1; /* Set to 1 when a SIGUSR1 signal is received. */ static int recv_child_signal; +static struct lttng_kernel_tracer_version kernel_tracer_version; +static struct lttng_kernel_tracer_abi_version kernel_tracer_abi_version; + /* * Consumer daemon specific control data. Every value not initialized here is * set to 0 by the static definition. @@ -2621,7 +2624,8 @@ static int init_kernel_tracer(void) } /* Validate kernel version */ - ret = kernel_validate_version(kernel_tracer_fd); + ret = kernel_validate_version(kernel_tracer_fd, &kernel_tracer_version, + &kernel_tracer_abi_version); if (ret < 0) { goto error_version; } -- 2.34.1