Make kernel tracer version global to the session daemon
authorJulien Desfossez <jdesfossez@efficios.com>
Fri, 1 Dec 2017 19:46:23 +0000 (14:46 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 28 Feb 2018 19:45:28 +0000 (14:45 -0500)
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 <jdesfossez@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/kernel.c
src/bin/lttng-sessiond/kernel.h
src/bin/lttng-sessiond/main.c

index 535a5b8e8c4035918f0e2665ac0af8f0e7ad8eda..35758e3bd02f252eaa90daa9719c7866a0f2b53f 100644 (file)
@@ -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:
index 1b394947b31f8c4c2c4ca6cc88efbc291c6a8db6..17aede1ed7f191b8041ff3cbf205091521752892 100644 (file)
@@ -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,
index 726c4e388c7a01669b068bc30d7de4f647a26549..2923664edc7e20d4b7c67b6ec0be621dcab942a9 100644 (file)
@@ -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;
        }
This page took 0.030255 seconds and 5 git commands to generate.