All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage
@ 2014-02-27 22:52 Michal Marek
  2014-02-27 22:52 ` [PATCH 1/5] testsuite: Check the list of loaded modules after a test Michal Marek
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Michal Marek @ 2014-02-27 22:52 UTC (permalink / raw)
  To: linux-modules

I only wanted to send the kmod_module_insert_module() patch after passing
the testsuite, but then I noticed the testsuite is hardly testing it :).

Michal

Michal Marek (5):
  testsuite: Check the list of loaded modules after a test
  testsuite: Add test for modprobe --force
  testsuite: Do not provide finit_module(2) on older kernels
  Add some tests for kernels without finit_module(2)
  libkmod-module: Simplify kmod_module_insert_module()

 libkmod/libkmod-module.c                           |   27 ++--
 testsuite/init_module.c                            |   25 +++
 .../4.4.4/kernel/drivers/input/mouse/psmouse.ko    |  Bin 0 -> 95649 bytes
 .../force/lib/modules/4.4.4/modules.alias          |    3 +
 .../force/lib/modules/4.4.4/modules.alias.bin      |  Bin 0 -> 101 bytes
 .../force/lib/modules/4.4.4/modules.dep            |    1 +
 .../force/lib/modules/4.4.4/modules.dep.bin        |  Bin 0 -> 72 bytes
 .../force/lib/modules/4.4.4/modules.devname        |    1 +
 .../force/lib/modules/4.4.4/modules.softdep        |    2 +
 .../force/lib/modules/4.4.4/modules.symbols        |    1 +
 .../force/lib/modules/4.4.4/modules.symbols.bin    |  Bin 0 -> 12 bytes
 .../3.3.3/kernel/drivers/input/mouse/psmouse.ko    |  Bin 0 -> 95649 bytes
 .../lib/modules/3.3.3/modules.alias                |    3 +
 .../lib/modules/3.3.3/modules.alias.bin            |  Bin 0 -> 101 bytes
 .../oldkernel-force/lib/modules/3.3.3/modules.dep  |    1 +
 .../lib/modules/3.3.3/modules.dep.bin              |  Bin 0 -> 72 bytes
 .../lib/modules/3.3.3/modules.devname              |    1 +
 .../lib/modules/3.3.3/modules.softdep              |    2 +
 .../lib/modules/3.3.3/modules.symbols              |    1 +
 .../lib/modules/3.3.3/modules.symbols.bin          |  Bin 0 -> 12 bytes
 .../3.3.3/kernel/drivers/input/mouse/psmouse.ko    |  Bin 0 -> 95649 bytes
 .../oldkernel/lib/modules/3.3.3/modules.alias      |    3 +
 .../oldkernel/lib/modules/3.3.3/modules.alias.bin  |  Bin 0 -> 101 bytes
 .../oldkernel/lib/modules/3.3.3/modules.dep        |    1 +
 .../oldkernel/lib/modules/3.3.3/modules.dep.bin    |  Bin 0 -> 72 bytes
 .../oldkernel/lib/modules/3.3.3/modules.devname    |    1 +
 .../oldkernel/lib/modules/3.3.3/modules.softdep    |    2 +
 .../oldkernel/lib/modules/3.3.3/modules.symbols    |    1 +
 .../lib/modules/3.3.3/modules.symbols.bin          |  Bin 0 -> 12 bytes
 testsuite/test-init.c                              |    1 +
 testsuite/test-modprobe.c                          |   82 ++++++++++-
 testsuite/testsuite.c                              |  158 +++++++++++++++++++-
 testsuite/testsuite.h                              |    2 +
 33 files changed, 296 insertions(+), 23 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/kernel/drivers/input/mouse/psmouse.ko
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/proc/modules
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/proc/modules
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/proc/modules

-- 
1.7.3.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/5] testsuite: Check the list of loaded modules after a test
  2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
@ 2014-02-27 22:52 ` Michal Marek
  2014-02-28  6:32   ` Lucas De Marchi
  2014-02-27 22:52 ` [PATCH 2/5] testsuite: Add test for modprobe --force Michal Marek
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Michal Marek @ 2014-02-27 22:52 UTC (permalink / raw)
  To: linux-modules

Add a ->modules_loaded member to struct test, which is a comma-separated
list of modules that should be present after the test finishes. Both
missing and excess modules cause an error.
---
 testsuite/test-init.c     |    1 +
 testsuite/test-modprobe.c |   13 +++-
 testsuite/testsuite.c     |  158 ++++++++++++++++++++++++++++++++++++++++++++-
 testsuite/testsuite.h     |    2 +
 4 files changed, 168 insertions(+), 6 deletions(-)

diff --git a/testsuite/test-init.c b/testsuite/test-init.c
index 63b6501..d2aa4bd 100644
--- a/testsuite/test-init.c
+++ b/testsuite/test-init.c
@@ -74,6 +74,7 @@ static DEFINE_TEST(test_insert,
 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-init/",
 		[TC_INIT_MODULE_RETCODES] = "bla:1:20",
 	},
+	.modules_loaded = "ext4",
 	.need_spawn = true);
 
 static noreturn int test_remove(const struct test *t)
diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
index 637d363..c3ef31e 100644
--- a/testsuite/test-modprobe.c
+++ b/testsuite/test-modprobe.c
@@ -91,7 +91,9 @@ static DEFINE_TEST(modprobe_show_alias_to_none,
 	},
 	.output = {
 		.out = TESTSUITE_ROOTFS "test-modprobe/show-depends/correct-psmouse.txt",
-	});
+	},
+	.modules_loaded = "",
+	);
 
 
 static noreturn int modprobe_builtin(const struct test *t)
@@ -131,7 +133,9 @@ static DEFINE_TEST(modprobe_softdep_loop,
 		[TC_UNAME_R] = "4.4.4",
 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/softdep-loop",
 		[TC_INIT_MODULE_RETCODES] = "",
-	});
+	},
+	.modules_loaded = "btusb,bluetooth",
+	);
 
 static noreturn int modprobe_install_cmd_loop(const struct test *t)
 {
@@ -156,6 +160,7 @@ static DEFINE_TEST(modprobe_install_cmd_loop,
 		{ "MODPROBE", ABS_TOP_BUILDDIR "/tools/modprobe" },
 		{ }
 		},
+	.modules_loaded = "snd,snd-pcm",
 	);
 
 static noreturn int modprobe_param_kcmdline(const struct test *t)
@@ -178,7 +183,9 @@ static DEFINE_TEST(modprobe_param_kcmdline,
 	},
 	.output = {
 		.out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline/correct.txt",
-	});
+	},
+	.modules_loaded = "",
+	);
 
 
 static const struct test *tests[] = {
diff --git a/testsuite/testsuite.c b/testsuite/testsuite.c
index 9877a64..f0fb393 100644
--- a/testsuite/testsuite.c
+++ b/testsuite/testsuite.c
@@ -20,6 +20,7 @@
 #include <fcntl.h>
 #include <getopt.h>
 #include <limits.h>
+#include <dirent.h>
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
@@ -528,12 +529,158 @@ fail:
 	return true;
 }
 
+static int cmp_modnames(const void *m1, const void *m2)
+{
+	const char *s1 = *(char * const *)m1;
+	const char *s2 = *(char * const *)m2;
+	int i;
+
+	for (i = 0;; i++) {
+		char c1 = s1[i], c2 = s2[i];
+		if (c1 == ',')
+			c1 = '\0';
+		if (c1 == '-')
+			c1 = '_';
+		if (c2 == ',')
+			c2 = '\0';
+		if (c2 == '-')
+			c2 = '_';
+
+		if (c1 == '\0' && c2 == '\0')
+			return 0;
+		if (c1 != c2)
+			return c1 - c2;
+	}
+}
+
+static const char ** read_expected_modules(const struct test *t, int * count)
+{
+	const char **res;
+	int len;
+	int i;
+	const char *p;
+
+	/*
+	 * Store pointers to elements of t->modules_loaded into res
+	 * (comma is considered equivalent to NUL)
+	 */
+	if (t->modules_loaded[0] == '\0') {
+		*count = 0;
+		return NULL;
+	}
+	len = 1;
+	for (p = t->modules_loaded; *p; p++)
+		if (*p == ',')
+			len++;
+	res = malloc(sizeof(char *) * len);
+	if (!res) {
+		perror("malloc");
+		*count = -1;
+		return NULL;
+	}
+	i = 0;
+	res[i] = t->modules_loaded;
+	for (p = t->modules_loaded; *p; p++)
+		if (*p == ',')
+			res[++i] = p + 1;
+	*count = len;
+	return res;
+}
+
+static char ** read_loaded_modules(const struct test *t, int * count)
+{
+	char *dirname;
+	DIR *dir;
+	struct dirent *dirent;
+	int i;
+	int len = 0;
+	char **res = NULL;
+
+	/* Store the entries in /sys/module to res */
+	dirname = malloc(PATH_MAX + 1);
+	if (!dirname) {
+		perror("malloc");
+		*count = -1;
+		return res;
+	}
+	snprintf(dirname, PATH_MAX, "%s/sys/module",
+			t->config[TC_ROOTFS] ? t->config[TC_ROOTFS] : "");
+	dir = opendir(dirname);
+	/* not an error, simply return empty list */
+	if (!dir)
+		goto out_dirname;
+	while ((dirent = readdir(dir))) {
+		if (dirent->d_name[0] == '.')
+			continue;
+		len++;
+	}
+	res = malloc(sizeof(char *) * len);
+	if (!res) {
+		perror("malloc");
+		len = -1;
+		goto out_dir;
+	}
+	rewinddir(dir);
+	i = 0;
+	while ((dirent = readdir(dir))) {
+		if (dirent->d_name[0] == '.')
+			continue;
+		res[i] = strdup(dirent->d_name);
+		if (!res[i]) {
+			for (i--; i >= 0; i--)
+				free(res[i]);
+			free(res);
+			res = NULL;
+			len = -1;
+			goto out_dir;
+		}
+		i++;
+	}
+out_dir:
+	closedir(dir);
+out_dirname:
+	free(dirname);
+	*count = len;
+	return res;
+}
+
+static int check_loaded_modules(const struct test *t)
+{
+	int l1, l2, i;
+	const char **a1;
+	char **a2;
+	int err = false;
+
+	a1 = read_expected_modules(t, &l1);
+	if (l1 < 0)
+		return err;
+	a2 = read_loaded_modules(t, &l2);
+	if (l2 < 0)
+		goto out_a1;
+	/* TODO: Report which modules are missing/superfluous */
+	if (l1 != l2)
+		goto out_a2;
+	qsort(a1, l1, sizeof(char *), cmp_modnames);
+	qsort(a2, l2, sizeof(char *), cmp_modnames);
+	for (i = 0; i < l1; i++)
+		if (cmp_modnames(&a1[i], &a2[i]) != 0)
+			goto out_a2;
+	err = true;
+out_a2:
+	for (i = 0; i < l2; i++)
+		free(a2[i]);
+	free(a2);
+out_a1:
+	free(a1);
+	return err;
+}
+
 static inline int test_run_parent(const struct test *t, int fdout[2],
 				int fderr[2], int fdmonitor[2], pid_t child)
 {
 	pid_t pid;
 	int err;
-	bool matchout;
+	bool matchout, match_modules;
 
 	/* Close write-fds */
 	if (t->output.out != NULL)
@@ -578,16 +725,21 @@ static inline int test_run_parent(const struct test *t, int fdout[2],
 
 	if (matchout)
 		matchout = check_generated_files(t);
+	if (t->modules_loaded)
+		match_modules = check_loaded_modules(t);
+	else
+		match_modules = true;
 
 	if (t->expected_fail == false) {
 		if (err == 0) {
-			if (matchout)
+			if (matchout && match_modules)
 				LOG("%sPASSED%s: %s\n",
 					ANSI_HIGHLIGHT_GREEN_ON, ANSI_HIGHLIGHT_OFF,
 					t->name);
 			else {
-				ERR("%sFAILED%s: exit ok but outputs do not match: %s\n",
+				ERR("%sFAILED%s: exit ok but %s do not match: %s\n",
 					ANSI_HIGHLIGHT_RED_ON, ANSI_HIGHLIGHT_OFF,
+					matchout ? "loaded modules" : "outputs",
 					t->name);
 				err = EXIT_FAILURE;
 			}
diff --git a/testsuite/testsuite.h b/testsuite/testsuite.h
index 97183cd..f2a75e5 100644
--- a/testsuite/testsuite.h
+++ b/testsuite/testsuite.h
@@ -95,6 +95,8 @@ struct test {
 		 */
 		const struct keyval *files;
 	} output;
+	/* comma-separated list of loaded modules at the end of the test */
+	const char *modules_loaded;
 	testfunc func;
 	const char *config[_TC_LAST];
 	const char *path;
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/5] testsuite: Add test for modprobe --force
  2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
  2014-02-27 22:52 ` [PATCH 1/5] testsuite: Check the list of loaded modules after a test Michal Marek
@ 2014-02-27 22:52 ` Michal Marek
  2014-02-27 22:52 ` [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels Michal Marek
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 13+ messages in thread
From: Michal Marek @ 2014-02-27 22:52 UTC (permalink / raw)
  To: linux-modules

There is no check if the correct flags are passed to finit_module, but
at least we cover the respective code path in kmod.
---
 .../4.4.4/kernel/drivers/input/mouse/psmouse.ko    |  Bin 0 -> 95649 bytes
 .../force/lib/modules/4.4.4/modules.alias          |    3 ++
 .../force/lib/modules/4.4.4/modules.alias.bin      |  Bin 0 -> 101 bytes
 .../force/lib/modules/4.4.4/modules.dep            |    1 +
 .../force/lib/modules/4.4.4/modules.dep.bin        |  Bin 0 -> 72 bytes
 .../force/lib/modules/4.4.4/modules.devname        |    1 +
 .../force/lib/modules/4.4.4/modules.softdep        |    2 +
 .../force/lib/modules/4.4.4/modules.symbols        |    1 +
 .../force/lib/modules/4.4.4/modules.symbols.bin    |  Bin 0 -> 12 bytes
 testsuite/test-modprobe.c                          |   23 ++++++++++++++++++++
 10 files changed, 31 insertions(+), 0 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/kernel/drivers/input/mouse/psmouse.ko
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/force/proc/modules

diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/kernel/drivers/input/mouse/psmouse.ko b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/kernel/drivers/input/mouse/psmouse.ko
new file mode 100644
index 0000000000000000000000000000000000000000..4eac2a3da3230435e7b21074f2a2681648cafc5e
GIT binary patch
literal 95649
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
Z*FWGjy0lT#DAQSpA#k&h)+l)E{{jSM|IGjZ

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias
new file mode 100644
index 0000000..a4e7677
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias
@@ -0,0 +1,3 @@
+# Aliases extracted from modules themselves.
+alias serio:ty05pr*id*ex* psmouse
+alias serio:ty01pr*id*ex* psmouse
diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.alias.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0b13537105c401379bc57d7871cd3486d3e7cd1a
GIT binary patch
literal 101
zcmdnM{w17&iGfjpfg!%2NGmf%E44z40SFjDL_u+Gera(k18$krqRf1&l1c*xL(>Bc
U3_KuBFmQl@L9MuW0Rw{r0F!PNmjD0&

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.builtin.bin
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep
new file mode 100644
index 0000000..7ba5711
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep
@@ -0,0 +1 @@
+kernel/drivers/input/mouse/psmouse.ko:
diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.dep.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bdd0eb5fb37bb470d36c28807569a458e5f866d9
GIT binary patch
literal 72
zcmdnM{w17&iGfjpfx)RbH@~zvl>rDCK}2?HQC@0}eo9ehS!z+Ser8@lX^B2qiGBe@
Qsa|%z6+=P60R{#h0Mj28lmGw#

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.devname b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.devname
new file mode 100644
index 0000000..58f6d6d
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.devname
@@ -0,0 +1 @@
+# Device nodes to trigger on-demand module loading.
diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.softdep
new file mode 100644
index 0000000..3cc0512
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.softdep
@@ -0,0 +1,2 @@
+# Soft dependencies extracted from modules themselves.
+# Copy, with a .conf extension, to /etc/modprobe.d to use it with modprobe.
diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols
new file mode 100644
index 0000000..618c345
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols
@@ -0,0 +1 @@
+# Aliases for symbols, used by symbol_request().
diff --git a/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/force/lib/modules/4.4.4/modules.symbols.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/force/proc/modules b/testsuite/rootfs-pristine/test-modprobe/force/proc/modules
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
index c3ef31e..92348b0 100644
--- a/testsuite/test-modprobe.c
+++ b/testsuite/test-modprobe.c
@@ -187,6 +187,28 @@ static DEFINE_TEST(modprobe_param_kcmdline,
 	.modules_loaded = "",
 	);
 
+static noreturn int modprobe_force(const struct test *t)
+{
+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+	const char *const args[] = {
+		progname,
+		"--force", "psmouse",
+		NULL,
+	};
+
+	test_spawn_prog(progname, args);
+	exit(EXIT_FAILURE);
+}
+static DEFINE_TEST(modprobe_force,
+	.description = "check modprobe --force",
+	.config = {
+		[TC_UNAME_R] = "4.4.4",
+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/force",
+		[TC_INIT_MODULE_RETCODES] = "",
+	},
+	.modules_loaded = "psmouse",
+	);
+
 
 static const struct test *tests[] = {
 	&smodprobe_show_depends,
@@ -196,6 +218,7 @@ static const struct test *tests[] = {
 	&smodprobe_softdep_loop,
 	&smodprobe_install_cmd_loop,
 	&smodprobe_param_kcmdline,
+	&smodprobe_force,
 	NULL,
 };
 
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels
  2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
  2014-02-27 22:52 ` [PATCH 1/5] testsuite: Check the list of loaded modules after a test Michal Marek
  2014-02-27 22:52 ` [PATCH 2/5] testsuite: Add test for modprobe --force Michal Marek
@ 2014-02-27 22:52 ` Michal Marek
  2014-02-28  6:37   ` Lucas De Marchi
  2014-02-27 22:52 ` [PATCH 4/5] Add some tests for kernels without finit_module(2) Michal Marek
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Michal Marek @ 2014-02-27 22:52 UTC (permalink / raw)
  To: linux-modules

If the test's uname -r is less that 3.8, return -ENOSYS from
finit_module(), so that the fallback is tested.
---
 testsuite/init_module.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/testsuite/init_module.c b/testsuite/init_module.c
index 42177e7..96f4aa7 100644
--- a/testsuite/init_module.c
+++ b/testsuite/init_module.c
@@ -37,6 +37,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/syscall.h>
+#include <sys/utsname.h>
 #include <unistd.h>
 
 /* kmod_elf_get_section() is not exported, we need the private header */
@@ -280,6 +281,25 @@ long init_module(void *mem, unsigned long len, const char *args)
 	return err;
 }
 
+static int check_kernel_version(int major, int minor)
+{
+	struct utsname u;
+	const char *p;
+	int maj = 0, min = 0;
+
+	if (uname(&u) < 0)
+		return false;
+	for (p = u.release; *p >= '0' && *p <= '9'; p++)
+		maj = maj * 10 + *p - '0';
+	if (*p == '.')
+		for (p++; *p >= '0' && *p <= '9'; p++)
+			min = min * 10 + *p - '0';
+	if (maj > major || (maj == major && min >= minor))
+		return true;
+	return false;
+}
+
+
 TS_EXPORT int finit_module(const int fd, const char *args, const int flags);
 
 int finit_module(const int fd, const char *args, const int flags)
@@ -289,6 +309,11 @@ int finit_module(const int fd, const char *args, const int flags)
 	unsigned long len;
 	struct stat st;
 
+	if (!check_kernel_version(3, 8)) {
+		stat("/old/kernel", &st);
+		errno = ENOSYS;
+		return -1;
+	}
 	if (fstat(fd, &st) < 0)
 		return -1;
 
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 4/5] Add some tests for kernels without finit_module(2)
  2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
                   ` (2 preceding siblings ...)
  2014-02-27 22:52 ` [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels Michal Marek
@ 2014-02-27 22:52 ` Michal Marek
  2014-02-27 22:52 ` [PATCH 5/5] libkmod-module: Simplify kmod_module_insert_module() Michal Marek
  2014-02-28  6:03 ` [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Lucas De Marchi
  5 siblings, 0 replies; 13+ messages in thread
From: Michal Marek @ 2014-02-27 22:52 UTC (permalink / raw)
  To: linux-modules

---
 .../3.3.3/kernel/drivers/input/mouse/psmouse.ko    |  Bin 0 -> 95649 bytes
 .../lib/modules/3.3.3/modules.alias                |    3 +
 .../lib/modules/3.3.3/modules.alias.bin            |  Bin 0 -> 101 bytes
 .../oldkernel-force/lib/modules/3.3.3/modules.dep  |    1 +
 .../lib/modules/3.3.3/modules.dep.bin              |  Bin 0 -> 72 bytes
 .../lib/modules/3.3.3/modules.devname              |    1 +
 .../lib/modules/3.3.3/modules.softdep              |    2 +
 .../lib/modules/3.3.3/modules.symbols              |    1 +
 .../lib/modules/3.3.3/modules.symbols.bin          |  Bin 0 -> 12 bytes
 .../3.3.3/kernel/drivers/input/mouse/psmouse.ko    |  Bin 0 -> 95649 bytes
 .../oldkernel/lib/modules/3.3.3/modules.alias      |    3 +
 .../oldkernel/lib/modules/3.3.3/modules.alias.bin  |  Bin 0 -> 101 bytes
 .../oldkernel/lib/modules/3.3.3/modules.dep        |    1 +
 .../oldkernel/lib/modules/3.3.3/modules.dep.bin    |  Bin 0 -> 72 bytes
 .../oldkernel/lib/modules/3.3.3/modules.devname    |    1 +
 .../oldkernel/lib/modules/3.3.3/modules.softdep    |    2 +
 .../oldkernel/lib/modules/3.3.3/modules.symbols    |    1 +
 .../lib/modules/3.3.3/modules.symbols.bin          |  Bin 0 -> 12 bytes
 testsuite/test-modprobe.c                          |   46 ++++++++++++++++++++
 19 files changed, 62 insertions(+), 0 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel-force/proc/modules
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/oldkernel/proc/modules

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko
new file mode 100644
index 0000000000000000000000000000000000000000..4eac2a3da3230435e7b21074f2a2681648cafc5e
GIT binary patch
literal 95649
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
Z*FWGjy0lT#DAQSpA#k&h)+l)E{{jSM|IGjZ

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias
new file mode 100644
index 0000000..a4e7677
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias
@@ -0,0 +1,3 @@
+# Aliases extracted from modules themselves.
+alias serio:ty05pr*id*ex* psmouse
+alias serio:ty01pr*id*ex* psmouse
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.alias.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0b13537105c401379bc57d7871cd3486d3e7cd1a
GIT binary patch
literal 101
zcmdnM{w17&iGfjpfg!%2NGmf%E44z40SFjDL_u+Gera(k18$krqRf1&l1c*xL(>Bc
U3_KuBFmQl@L9MuW0Rw{r0F!PNmjD0&

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.builtin.bin
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep
new file mode 100644
index 0000000..7ba5711
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep
@@ -0,0 +1 @@
+kernel/drivers/input/mouse/psmouse.ko:
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.dep.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bdd0eb5fb37bb470d36c28807569a458e5f866d9
GIT binary patch
literal 72
zcmdnM{w17&iGfjpfx)RbH@~zvl>rDCK}2?HQC@0}eo9ehS!z+Ser8@lX^B2qiGBe@
Qsa|%z6+=P60R{#h0Mj28lmGw#

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.devname b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.devname
new file mode 100644
index 0000000..58f6d6d
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.devname
@@ -0,0 +1 @@
+# Device nodes to trigger on-demand module loading.
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.softdep
new file mode 100644
index 0000000..3cc0512
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.softdep
@@ -0,0 +1,2 @@
+# Soft dependencies extracted from modules themselves.
+# Copy, with a .conf extension, to /etc/modprobe.d to use it with modprobe.
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols
new file mode 100644
index 0000000..618c345
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols
@@ -0,0 +1 @@
+# Aliases for symbols, used by symbol_request().
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/lib/modules/3.3.3/modules.symbols.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/proc/modules b/testsuite/rootfs-pristine/test-modprobe/oldkernel-force/proc/modules
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/kernel/drivers/input/mouse/psmouse.ko
new file mode 100644
index 0000000000000000000000000000000000000000..4eac2a3da3230435e7b21074f2a2681648cafc5e
GIT binary patch
literal 95649
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
Z*FWGjy0lT#DAQSpA#k&h)+l)E{{jSM|IGjZ

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias
new file mode 100644
index 0000000..a4e7677
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias
@@ -0,0 +1,3 @@
+# Aliases extracted from modules themselves.
+alias serio:ty05pr*id*ex* psmouse
+alias serio:ty01pr*id*ex* psmouse
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.alias.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0b13537105c401379bc57d7871cd3486d3e7cd1a
GIT binary patch
literal 101
zcmdnM{w17&iGfjpfg!%2NGmf%E44z40SFjDL_u+Gera(k18$krqRf1&l1c*xL(>Bc
U3_KuBFmQl@L9MuW0Rw{r0F!PNmjD0&

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.builtin.bin
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep
new file mode 100644
index 0000000..7ba5711
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep
@@ -0,0 +1 @@
+kernel/drivers/input/mouse/psmouse.ko:
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.dep.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bdd0eb5fb37bb470d36c28807569a458e5f866d9
GIT binary patch
literal 72
zcmdnM{w17&iGfjpfx)RbH@~zvl>rDCK}2?HQC@0}eo9ehS!z+Ser8@lX^B2qiGBe@
Qsa|%z6+=P60R{#h0Mj28lmGw#

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.devname b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.devname
new file mode 100644
index 0000000..58f6d6d
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.devname
@@ -0,0 +1 @@
+# Device nodes to trigger on-demand module loading.
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.softdep
new file mode 100644
index 0000000..3cc0512
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.softdep
@@ -0,0 +1,2 @@
+# Soft dependencies extracted from modules themselves.
+# Copy, with a .conf extension, to /etc/modprobe.d to use it with modprobe.
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols
new file mode 100644
index 0000000..618c345
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols
@@ -0,0 +1 @@
+# Aliases for symbols, used by symbol_request().
diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/oldkernel/lib/modules/3.3.3/modules.symbols.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/oldkernel/proc/modules b/testsuite/rootfs-pristine/test-modprobe/oldkernel/proc/modules
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
index 92348b0..b675f48 100644
--- a/testsuite/test-modprobe.c
+++ b/testsuite/test-modprobe.c
@@ -209,6 +209,50 @@ static DEFINE_TEST(modprobe_force,
 	.modules_loaded = "psmouse",
 	);
 
+static noreturn int modprobe_oldkernel(const struct test *t)
+{
+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+	const char *const args[] = {
+		progname,
+		"psmouse",
+		NULL,
+	};
+
+	test_spawn_prog(progname, args);
+	exit(EXIT_FAILURE);
+}
+static DEFINE_TEST(modprobe_oldkernel,
+	.description = "check modprobe --force",
+	.config = {
+		[TC_UNAME_R] = "3.3.3",
+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/oldkernel",
+		[TC_INIT_MODULE_RETCODES] = "",
+	},
+	.modules_loaded = "psmouse",
+	);
+
+static noreturn int modprobe_oldkernel_force(const struct test *t)
+{
+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+	const char *const args[] = {
+		progname,
+		"--force", "psmouse",
+		NULL,
+	};
+
+	test_spawn_prog(progname, args);
+	exit(EXIT_FAILURE);
+}
+static DEFINE_TEST(modprobe_oldkernel_force,
+	.description = "check modprobe --force",
+	.config = {
+		[TC_UNAME_R] = "3.3.3",
+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/oldkernel-force",
+		[TC_INIT_MODULE_RETCODES] = "",
+	},
+	.modules_loaded = "psmouse",
+	);
+
 
 static const struct test *tests[] = {
 	&smodprobe_show_depends,
@@ -219,6 +263,8 @@ static const struct test *tests[] = {
 	&smodprobe_install_cmd_loop,
 	&smodprobe_param_kcmdline,
 	&smodprobe_force,
+	&smodprobe_oldkernel,
+	&smodprobe_oldkernel_force,
 	NULL,
 };
 
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 5/5] libkmod-module: Simplify kmod_module_insert_module()
  2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
                   ` (3 preceding siblings ...)
  2014-02-27 22:52 ` [PATCH 4/5] Add some tests for kernels without finit_module(2) Michal Marek
@ 2014-02-27 22:52 ` Michal Marek
  2014-02-28  6:39   ` Lucas De Marchi
  2014-02-28  6:03 ` [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Lucas De Marchi
  5 siblings, 1 reply; 13+ messages in thread
From: Michal Marek @ 2014-02-27 22:52 UTC (permalink / raw)
  To: linux-modules

Store the file and elf pointer in the kmod_module structure and have it
freed together with the module.
---
 libkmod/libkmod-module.c |   27 ++++++++++-----------------
 1 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index 3d3325f..a6c8a6e 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -790,8 +790,7 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
 	int err;
 	const void *mem;
 	off_t size;
-	struct kmod_file *file;
-	struct kmod_elf *elf = NULL;
+	struct kmod_elf *elf;
 	const char *path;
 	const char *args = options ? options : "";
 
@@ -804,13 +803,13 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
 		return -ENOSYS;
 	}
 
-	file = kmod_file_open(mod->ctx, path);
-	if (file == NULL) {
+	mod->file = kmod_file_open(mod->ctx, path);
+	if (mod->file == NULL) {
 		err = -errno;
 		return err;
 	}
 
-	if (kmod_file_get_direct(file)) {
+	if (kmod_file_get_direct(mod->file)) {
 		unsigned int kernel_flags = 0;
 
 		if (flags & KMOD_INSERT_FORCE_VERMAGIC)
@@ -818,19 +817,16 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
 		if (flags & KMOD_INSERT_FORCE_MODVERSION)
 			kernel_flags |= MODULE_INIT_IGNORE_MODVERSIONS;
 
-		err = finit_module(kmod_file_get_fd(file), args, kernel_flags);
+		err = finit_module(kmod_file_get_fd(mod->file), args, kernel_flags);
 		if (err == 0 || errno != ENOSYS)
 			goto init_finished;
 	}
 
-	size = kmod_file_get_size(file);
-	mem = kmod_file_get_contents(file);
-
 	if (flags & (KMOD_INSERT_FORCE_VERMAGIC | KMOD_INSERT_FORCE_MODVERSION)) {
-		elf = kmod_elf_new(mem, size);
+		elf = kmod_file_get_elf(mod->file);
 		if (elf == NULL) {
 			err = -errno;
-			goto elf_failed;
+			return err;
 		}
 
 		if (flags & KMOD_INSERT_FORCE_MODVERSION) {
@@ -846,7 +842,10 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
 		}
 
 		mem = kmod_elf_get_memory(elf);
+	} else {
+		mem = kmod_file_get_contents(mod->file);
 	}
+	size = kmod_file_get_size(mod->file);
 
 	err = init_module(mem, size, args);
 init_finished:
@@ -854,12 +853,6 @@ init_finished:
 		err = -errno;
 		INFO(mod->ctx, "Failed to insert module '%s': %m\n", path);
 	}
-
-	if (elf != NULL)
-		kmod_elf_unref(elf);
-elf_failed:
-	kmod_file_unref(file);
-
 	return err;
 }
 
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage
  2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
                   ` (4 preceding siblings ...)
  2014-02-27 22:52 ` [PATCH 5/5] libkmod-module: Simplify kmod_module_insert_module() Michal Marek
@ 2014-02-28  6:03 ` Lucas De Marchi
  2014-02-28  6:42   ` Michal Marek
  5 siblings, 1 reply; 13+ messages in thread
From: Lucas De Marchi @ 2014-02-28  6:03 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-modules

Hi Michal,

On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
> I only wanted to send the kmod_module_insert_module() patch after passing
> the testsuite, but then I noticed the testsuite is hardly testing it :).
>
> Michal
>
> Michal Marek (5):
>   testsuite: Check the list of loaded modules after a test
>   testsuite: Add test for modprobe --force
>   testsuite: Do not provide finit_module(2) on older kernels
>   Add some tests for kernels without finit_module(2)
>   libkmod-module: Simplify kmod_module_insert_module()

It's pretty good. Thanks.

I only have some cosmetic comments. I can make the changes when
applying if you prefer. See in the individual patches.

Lucas De Marchi

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/5] testsuite: Check the list of loaded modules after a test
  2014-02-27 22:52 ` [PATCH 1/5] testsuite: Check the list of loaded modules after a test Michal Marek
@ 2014-02-28  6:32   ` Lucas De Marchi
  2014-02-28  6:40     ` Michal Marek
  0 siblings, 1 reply; 13+ messages in thread
From: Lucas De Marchi @ 2014-02-28  6:32 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-modules

On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
> Add a ->modules_loaded member to struct test, which is a comma-separated
> list of modules that should be present after the test finishes. Both
> missing and excess modules cause an error.
> ---
>  testsuite/test-init.c     |    1 +
>  testsuite/test-modprobe.c |   13 +++-
>  testsuite/testsuite.c     |  158 ++++++++++++++++++++++++++++++++++++++++++++-
>  testsuite/testsuite.h     |    2 +
>  4 files changed, 168 insertions(+), 6 deletions(-)
>
> diff --git a/testsuite/test-init.c b/testsuite/test-init.c
> index 63b6501..d2aa4bd 100644
> --- a/testsuite/test-init.c
> +++ b/testsuite/test-init.c
> @@ -74,6 +74,7 @@ static DEFINE_TEST(test_insert,
>                 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-init/",
>                 [TC_INIT_MODULE_RETCODES] = "bla:1:20",
>         },
> +       .modules_loaded = "ext4",
>         .need_spawn = true);
>
>  static noreturn int test_remove(const struct test *t)
> diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
> index 637d363..c3ef31e 100644
> --- a/testsuite/test-modprobe.c
> +++ b/testsuite/test-modprobe.c
> @@ -91,7 +91,9 @@ static DEFINE_TEST(modprobe_show_alias_to_none,
>         },
>         .output = {
>                 .out = TESTSUITE_ROOTFS "test-modprobe/show-depends/correct-psmouse.txt",
> -       });
> +       },
> +       .modules_loaded = "",
> +       );
>
>
>  static noreturn int modprobe_builtin(const struct test *t)
> @@ -131,7 +133,9 @@ static DEFINE_TEST(modprobe_softdep_loop,
>                 [TC_UNAME_R] = "4.4.4",
>                 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/softdep-loop",
>                 [TC_INIT_MODULE_RETCODES] = "",
> -       });
> +       },
> +       .modules_loaded = "btusb,bluetooth",
> +       );
>
>  static noreturn int modprobe_install_cmd_loop(const struct test *t)
>  {
> @@ -156,6 +160,7 @@ static DEFINE_TEST(modprobe_install_cmd_loop,
>                 { "MODPROBE", ABS_TOP_BUILDDIR "/tools/modprobe" },
>                 { }
>                 },
> +       .modules_loaded = "snd,snd-pcm",
>         );
>
>  static noreturn int modprobe_param_kcmdline(const struct test *t)
> @@ -178,7 +183,9 @@ static DEFINE_TEST(modprobe_param_kcmdline,
>         },
>         .output = {
>                 .out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline/correct.txt",
> -       });
> +       },
> +       .modules_loaded = "",
> +       );
>
>
>  static const struct test *tests[] = {
> diff --git a/testsuite/testsuite.c b/testsuite/testsuite.c
> index 9877a64..f0fb393 100644
> --- a/testsuite/testsuite.c
> +++ b/testsuite/testsuite.c
> @@ -20,6 +20,7 @@
>  #include <fcntl.h>
>  #include <getopt.h>
>  #include <limits.h>
> +#include <dirent.h>
>  #include <stdio.h>
>  #include <stdarg.h>
>  #include <stdlib.h>
> @@ -528,12 +529,158 @@ fail:
>         return true;
>  }
>
> +static int cmp_modnames(const void *m1, const void *m2)
> +{
> +       const char *s1 = *(char * const *)m1;
> +       const char *s2 = *(char * const *)m2;
> +       int i;
> +
> +       for (i = 0;; i++) {
> +               char c1 = s1[i], c2 = s2[i];
> +               if (c1 == ',')
> +                       c1 = '\0';
> +               if (c1 == '-')
> +                       c1 = '_';
> +               if (c2 == ',')
> +                       c2 = '\0';
> +               if (c2 == '-')
> +                       c2 = '_';
> +
> +               if (c1 == '\0' && c2 == '\0')
> +                       return 0;
> +               if (c1 != c2)
> +                       return c1 - c2;
> +       }
> +}
> +
> +static const char ** read_expected_modules(const struct test *t, int * count)

There's one extra space there... It'd the first time " ** " and " * "
would appear in the codebase.

The rest of the review is more about doing less allocations, but since
this is in the testsuite, I'm willing to apply as is if you prefer.

> +{
> +       const char **res;
> +       int len;
> +       int i;
> +       const char *p;
> +
> +       /*
> +        * Store pointers to elements of t->modules_loaded into res
> +        * (comma is considered equivalent to NUL)
> +        */
> +       if (t->modules_loaded[0] == '\0') {
> +               *count = 0;
> +               return NULL;
> +       }
> +       len = 1;
> +       for (p = t->modules_loaded; *p; p++)
> +               if (*p == ',')
> +                       len++;
> +       res = malloc(sizeof(char *) * len);
> +       if (!res) {
> +               perror("malloc");
> +               *count = -1;
> +               return NULL;
> +       }
> +       i = 0;
> +       res[i] = t->modules_loaded;
> +       for (p = t->modules_loaded; *p; p++)
> +               if (*p == ',')
> +                       res[++i] = p + 1;
> +       *count = len;
> +       return res;
> +}
> +
> +static char ** read_loaded_modules(const struct test *t, int * count)
> +{
> +       char *dirname;
> +       DIR *dir;
> +       struct dirent *dirent;
> +       int i;
> +       int len = 0;
> +       char **res = NULL;
> +
> +       /* Store the entries in /sys/module to res */
> +       dirname = malloc(PATH_MAX + 1);
> +       if (!dirname) {
> +               perror("malloc");
> +               *count = -1;
> +               return res;
> +       }

you can do this on stack like we do everywhere else for non-recursive functions.

> +       snprintf(dirname, PATH_MAX, "%s/sys/module",
> +                       t->config[TC_ROOTFS] ? t->config[TC_ROOTFS] : "");
> +       dir = opendir(dirname);
> +       /* not an error, simply return empty list */
> +       if (!dir)
> +               goto out_dirname;
> +       while ((dirent = readdir(dir))) {
> +               if (dirent->d_name[0] == '.')
> +                       continue;
> +               len++;
> +       }
> +       res = malloc(sizeof(char *) * len);
> +       if (!res) {
> +               perror("malloc");
> +               len = -1;
> +               goto out_dir;
> +       }
> +       rewinddir(dir);
> +       i = 0;
> +       while ((dirent = readdir(dir))) {
> +               if (dirent->d_name[0] == '.')
> +                       continue;
> +               res[i] = strdup(dirent->d_name);
> +               if (!res[i]) {
> +                       for (i--; i >= 0; i--)
> +                               free(res[i]);
> +                       free(res);
> +                       res = NULL;
> +                       len = -1;
> +                       goto out_dir;
> +               }

In the first loop you could store the total size and then allocate
only one big string. Then in the second loop you just copy d_name to
the buffer. Just make sure not to extrapolate the size allocated in
the previous loop. Then you don't need all the "free in loop code
above and below.

> +               i++;
> +       }
> +out_dir:
> +       closedir(dir);
> +out_dirname:
> +       free(dirname);
> +       *count = len;
> +       return res;
> +}
> +
> +static int check_loaded_modules(const struct test *t)
> +{
> +       int l1, l2, i;
> +       const char **a1;
> +       char **a2;
> +       int err = false;
> +
> +       a1 = read_expected_modules(t, &l1);
> +       if (l1 < 0)
> +               return err;
> +       a2 = read_loaded_modules(t, &l2);
> +       if (l2 < 0)
> +               goto out_a1;
> +       /* TODO: Report which modules are missing/superfluous */
> +       if (l1 != l2)
> +               goto out_a2;
> +       qsort(a1, l1, sizeof(char *), cmp_modnames);
> +       qsort(a2, l2, sizeof(char *), cmp_modnames);
> +       for (i = 0; i < l1; i++)
> +               if (cmp_modnames(&a1[i], &a2[i]) != 0)
> +                       goto out_a2;

Isn't the order important? If we take the order into account the code
could be even simpler because we don't even have to store the char **.
Just build the second string with ',' as separator and strcmp() them.


Lucas De Marchi

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels
  2014-02-27 22:52 ` [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels Michal Marek
@ 2014-02-28  6:37   ` Lucas De Marchi
  2014-02-28  6:41     ` Michal Marek
  0 siblings, 1 reply; 13+ messages in thread
From: Lucas De Marchi @ 2014-02-28  6:37 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-modules

On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
> If the test's uname -r is less that 3.8, return -ENOSYS from
> finit_module(), so that the fallback is tested.
> ---
>  testsuite/init_module.c |   25 +++++++++++++++++++++++++
>  1 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/testsuite/init_module.c b/testsuite/init_module.c
> index 42177e7..96f4aa7 100644
> --- a/testsuite/init_module.c
> +++ b/testsuite/init_module.c
> @@ -37,6 +37,7 @@
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  #include <sys/syscall.h>
> +#include <sys/utsname.h>
>  #include <unistd.h>
>
>  /* kmod_elf_get_section() is not exported, we need the private header */
> @@ -280,6 +281,25 @@ long init_module(void *mem, unsigned long len, const char *args)
>         return err;
>  }
>
> +static int check_kernel_version(int major, int minor)
> +{
> +       struct utsname u;
> +       const char *p;
> +       int maj = 0, min = 0;
> +
> +       if (uname(&u) < 0)
> +               return false;
> +       for (p = u.release; *p >= '0' && *p <= '9'; p++)
> +               maj = maj * 10 + *p - '0';
> +       if (*p == '.')
> +               for (p++; *p >= '0' && *p <= '9'; p++)
> +                       min = min * 10 + *p - '0';
> +       if (maj > major || (maj == major && min >= minor))
> +               return true;
> +       return false;
> +}
> +
> +
>  TS_EXPORT int finit_module(const int fd, const char *args, const int flags);
>
>  int finit_module(const int fd, const char *args, const int flags)
> @@ -289,6 +309,11 @@ int finit_module(const int fd, const char *args, const int flags)
>         unsigned long len;
>         struct stat st;
>
> +       if (!check_kernel_version(3, 8)) {
> +               stat("/old/kernel", &st);

leftover?

-- 

Lucas De Marchi

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 5/5] libkmod-module: Simplify kmod_module_insert_module()
  2014-02-27 22:52 ` [PATCH 5/5] libkmod-module: Simplify kmod_module_insert_module() Michal Marek
@ 2014-02-28  6:39   ` Lucas De Marchi
  0 siblings, 0 replies; 13+ messages in thread
From: Lucas De Marchi @ 2014-02-28  6:39 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-modules

On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
> Store the file and elf pointer in the kmod_module structure and have it
> freed together with the module.
> ---
>  libkmod/libkmod-module.c |   27 ++++++++++-----------------
>  1 files changed, 10 insertions(+), 17 deletions(-)
>
> diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
> index 3d3325f..a6c8a6e 100644
> --- a/libkmod/libkmod-module.c
> +++ b/libkmod/libkmod-module.c
> @@ -790,8 +790,7 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
>         int err;
>         const void *mem;
>         off_t size;
> -       struct kmod_file *file;
> -       struct kmod_elf *elf = NULL;
> +       struct kmod_elf *elf;
>         const char *path;
>         const char *args = options ? options : "";
>
> @@ -804,13 +803,13 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
>                 return -ENOSYS;
>         }
>
> -       file = kmod_file_open(mod->ctx, path);
> -       if (file == NULL) {
> +       mod->file = kmod_file_open(mod->ctx, path);
> +       if (mod->file == NULL) {
>                 err = -errno;
>                 return err;
>         }
>
> -       if (kmod_file_get_direct(file)) {
> +       if (kmod_file_get_direct(mod->file)) {
>                 unsigned int kernel_flags = 0;
>
>                 if (flags & KMOD_INSERT_FORCE_VERMAGIC)
> @@ -818,19 +817,16 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
>                 if (flags & KMOD_INSERT_FORCE_MODVERSION)
>                         kernel_flags |= MODULE_INIT_IGNORE_MODVERSIONS;
>
> -               err = finit_module(kmod_file_get_fd(file), args, kernel_flags);
> +               err = finit_module(kmod_file_get_fd(mod->file), args, kernel_flags);
>                 if (err == 0 || errno != ENOSYS)
>                         goto init_finished;
>         }
>
> -       size = kmod_file_get_size(file);
> -       mem = kmod_file_get_contents(file);
> -
>         if (flags & (KMOD_INSERT_FORCE_VERMAGIC | KMOD_INSERT_FORCE_MODVERSION)) {
> -               elf = kmod_elf_new(mem, size);
> +               elf = kmod_file_get_elf(mod->file);
>                 if (elf == NULL) {
>                         err = -errno;
> -                       goto elf_failed;
> +                       return err;
>                 }
>
>                 if (flags & KMOD_INSERT_FORCE_MODVERSION) {
> @@ -846,7 +842,10 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
>                 }
>
>                 mem = kmod_elf_get_memory(elf);
> +       } else {
> +               mem = kmod_file_get_contents(mod->file);
>         }
> +       size = kmod_file_get_size(mod->file);
>
>         err = init_module(mem, size, args);
>  init_finished:
> @@ -854,12 +853,6 @@ init_finished:
>                 err = -errno;
>                 INFO(mod->ctx, "Failed to insert module '%s': %m\n", path);
>         }
> -
> -       if (elf != NULL)
> -               kmod_elf_unref(elf);
> -elf_failed:
> -       kmod_file_unref(file);
> -
>         return err;
>  }

Ack.

Lucas De Marchi

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/5] testsuite: Check the list of loaded modules after a test
  2014-02-28  6:32   ` Lucas De Marchi
@ 2014-02-28  6:40     ` Michal Marek
  0 siblings, 0 replies; 13+ messages in thread
From: Michal Marek @ 2014-02-28  6:40 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: linux-modules

Dne 28.2.2014 07:32, Lucas De Marchi napsal(a):
> On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
>> +       qsort(a1, l1, sizeof(char *), cmp_modnames);
>> +       qsort(a2, l2, sizeof(char *), cmp_modnames);
>> +       for (i = 0; i < l1; i++)
>> +               if (cmp_modnames(&a1[i], &a2[i]) != 0)
>> +                       goto out_a2;
> 
> Isn't the order important? If we take the order into account the code
> could be even simpler because we don't even have to store the char **.
> Just build the second string with ',' as separator and strcmp() them.

The readdir() order is not defined. We could change the preloaded
init_module to build another list of modules that maintains order, but
I'm not sure if it's worth it. I will simplify the allocations as you
suggest.

Michal

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels
  2014-02-28  6:37   ` Lucas De Marchi
@ 2014-02-28  6:41     ` Michal Marek
  0 siblings, 0 replies; 13+ messages in thread
From: Michal Marek @ 2014-02-28  6:41 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: linux-modules

Dne 28.2.2014 07:37, Lucas De Marchi napsal(a):
> On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
>> +       if (!check_kernel_version(3, 8)) {
>> +               stat("/old/kernel", &st);
> 
> leftover?

Yes, sorry.

Michal

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage
  2014-02-28  6:03 ` [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Lucas De Marchi
@ 2014-02-28  6:42   ` Michal Marek
  0 siblings, 0 replies; 13+ messages in thread
From: Michal Marek @ 2014-02-28  6:42 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: linux-modules

Dne 28.2.2014 07:03, Lucas De Marchi napsal(a):
> Hi Michal,
> 
> On Thu, Feb 27, 2014 at 7:52 PM, Michal Marek <mmarek@suse.cz> wrote:
>> I only wanted to send the kmod_module_insert_module() patch after passing
>> the testsuite, but then I noticed the testsuite is hardly testing it :).
>>
>> Michal
>>
>> Michal Marek (5):
>>   testsuite: Check the list of loaded modules after a test
>>   testsuite: Add test for modprobe --force
>>   testsuite: Do not provide finit_module(2) on older kernels
>>   Add some tests for kernels without finit_module(2)
>>   libkmod-module: Simplify kmod_module_insert_module()
> 
> It's pretty good. Thanks.
> 
> I only have some cosmetic comments. I can make the changes when
> applying if you prefer. See in the individual patches.

I will resend an updated series. Thanks a lot for the review!

Michal

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-02-28  6:42 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-27 22:52 [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Michal Marek
2014-02-27 22:52 ` [PATCH 1/5] testsuite: Check the list of loaded modules after a test Michal Marek
2014-02-28  6:32   ` Lucas De Marchi
2014-02-28  6:40     ` Michal Marek
2014-02-27 22:52 ` [PATCH 2/5] testsuite: Add test for modprobe --force Michal Marek
2014-02-27 22:52 ` [PATCH 3/5] testsuite: Do not provide finit_module(2) on older kernels Michal Marek
2014-02-28  6:37   ` Lucas De Marchi
2014-02-28  6:41     ` Michal Marek
2014-02-27 22:52 ` [PATCH 4/5] Add some tests for kernels without finit_module(2) Michal Marek
2014-02-27 22:52 ` [PATCH 5/5] libkmod-module: Simplify kmod_module_insert_module() Michal Marek
2014-02-28  6:39   ` Lucas De Marchi
2014-02-28  6:03 ` [PATCH 0/5] kmod_module_insert_module() cleanup and test coverage Lucas De Marchi
2014-02-28  6:42   ` Michal Marek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.