[LEDE-DEV] [PATCH ubox V3] kmodloader: support '-q' quiet option

Kevin Darbyshire-Bryant kevin at darbyshire-bryant.me.uk
Sun Jan 29 01:23:15 PST 2017


The kernel opportunistically attempts to load modules in advanced with
'predicted' module names.  Often these modules don't exist and hence
kmodloader produces lots of logfile noise.  The kernel commandline to
modprobe from kworker proceses is '-q -- modulename' where '-q' means
quiet. Support suppressing that noise.

Signed-off-by: Kevin Darbyshire-Bryant <kevin at darbyshire-bryant.me.uk>
---
V2 - style fixes
V3 - actually return non 0 return code on module not found error

 kmodloader.c | 39 +++++++++++++++++++++++++++++----------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/kmodloader.c b/kmodloader.c
index 729027a..465d3de 100644
--- a/kmodloader.c
+++ b/kmodloader.c
@@ -660,6 +660,13 @@ static int print_insmod_usage(void)
 	return -1;
 }
 
+static int print_modprobe_usage(void)
+{
+	ULOG_INFO("Usage:\n\tmodprobe [-q] filename\n");
+
+	return -1;
+}
+
 static int print_usage(char *arg)
 {
 	ULOG_INFO("Usage:\n\t%s module\n", arg);
@@ -824,15 +831,24 @@ static int main_modprobe(int argc, char **argv)
 	struct module *m;
 	char *name;
 	char *mod = NULL;
-	int i;
+	int opt;
+	bool quiet = false;
+
+	while ((opt = getopt(argc, argv, "q")) != -1 ) {
+		switch (opt) {
+			case 'q': /* shhhh! */
+				quiet = true;
+				break;
+			default: /* '?' */
+				return print_modprobe_usage();
+				break;
+			}
+	}
 
-	for (i = 1; i < argc; i++)
-		if (argv[i][0] != '-') {
-			mod = argv[i];
-			break;
-		}
-	if (!mod)
-		return print_usage("modprobe");
+	if (optind >= argc)
+		return print_modprobe_usage(); /* expected module after options */
+
+	mod = argv[optind];
 
 	if (scan_module_folders())
 		return -1;
@@ -843,10 +859,13 @@ static int main_modprobe(int argc, char **argv)
 	name = get_module_name(mod);
 	m = find_module(name);
 	if (m && m->state == LOADED) {
-		ULOG_ERR("%s is already loaded\n", name);
+		if (!quiet)
+			ULOG_ERR("%s is already loaded\n", name);
 		return -1;
 	} else if (!m) {
-		ULOG_ERR("failed to find a module named %s\n", name);
+		if (!quiet)
+			ULOG_ERR("failed to find a module named %s\n", name);
+		return -1;
 	} else {
 		int fail;
 
-- 
2.7.4




More information about the Lede-dev mailing list