Fix: ignore error when loading optional kmod
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 15 Sep 2014 17:43:56 +0000 (13:43 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 19 Sep 2014 16:11:49 +0000 (12:11 -0400)
This commit also improves the accuracy of debug messages: a module is
not "successfully" loaded when it's optional and actually not loaded.

Fixes: #837
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-sessiond/modprobe.c

index d329bb9514905570a1c3a25c36c5a9672d4bf353..a28356b423129958728f0ee66a4029163214a965 100644 (file)
@@ -209,8 +209,16 @@ static int modprobe_lttng(struct kern_modules_param *modules,
 
                ret = kmod_module_probe_insert_module(mod, KMOD_PROBE_IGNORE_LOADED,
                                NULL, NULL, NULL, NULL);
-               if (required && ret < 0) {
-                       ERR("Unable to load module %s", modules[i].name);
+               if (ret < 0) {
+                       if (required) {
+                               ERR("Unable to load required module %s",
+                                               modules[i].name);
+                               goto error;
+                       } else {
+                               DBG("Unable to load optional module %s; continuing",
+                                               modules[i].name);
+                               ret = 0;
+                       }
                } else {
                        DBG("Modprobe successfully %s", modules[i].name);
                }
@@ -245,10 +253,25 @@ static int modprobe_lttng(struct kern_modules_param *modules,
                modprobe[sizeof(modprobe) - 1] = '\0';
                ret = system(modprobe);
                if (ret == -1) {
-                       ERR("Unable to launch modprobe for module %s",
-                                       modules[i].name);
-               } else if (required && WEXITSTATUS(ret) != 0) {
-                       ERR("Unable to load module %s", modules[i].name);
+                       if (required) {
+                               ERR("Unable to launch modprobe for required module %s",
+                                               modules[i].name);
+                               goto error;
+                       } else {
+                               DBG("Unable to launch modprobe for optional module %s; continuing",
+                                               modules[i].name);
+                               ret = 0;
+                       }
+               } else if (WEXITSTATUS(ret) != 0) {
+                       if (required) {
+                               ERR("Unable to load required module %s",
+                                               modules[i].name);
+                               goto error;
+                       } else {
+                               DBG("Unable to load optional module %s; continuing",
+                                               modules[i].name);
+                               ret = 0;
+                       }
                } else {
                        DBG("Modprobe successfully %s", modules[i].name);
                }
This page took 0.026036 seconds and 4 git commands to generate.