summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustavo Sousa <gustavo.sousa@intel.com>2023-01-13 18:37:44 -0300
committerLucas De Marchi <lucas.de.marchi@gmail.com>2023-01-13 16:48:02 -0800
commitf3db15e9009777318da6ade7cc82b7dfb472d0c4 (patch)
tree87e7a77ae734c51a0ebe7868c0649ec2d3422200
parente54f74c4f7ac9b2f55bc6ac2ffb940e04308bb3f (diff)
downloadkmod-f3db15e9009777318da6ade7cc82b7dfb472d0c4.tar.gz
modprobe: Move insertion block into separate function
That same logic will be used for enabling modprobe for paths in the next patch. As such, prepare for that by extracting that block into its own function. Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
-rw-r--r--tools/modprobe.c77
1 files changed, 42 insertions, 35 deletions
diff --git a/tools/modprobe.c b/tools/modprobe.c
index 3240c2b..d4012fa 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -569,15 +569,53 @@ static void print_action(struct kmod_module *m, bool install,
printf("insmod %s %s\n", kmod_module_get_path(m), options);
}
+static int insmod_insert(struct kmod_module *mod, int flags,
+ const char *extra_options)
+{
+ int err = 0;
+ void (*show)(struct kmod_module *m, bool install,
+ const char *options) = NULL;
+
+ if (do_show || verbose > DEFAULT_VERBOSE)
+ show = &print_action;
+
+ if (lookup_only)
+ printf("%s\n", kmod_module_get_name(mod));
+ else
+ err = kmod_module_probe_insert_module(mod, flags,
+ extra_options, NULL, NULL, show);
+
+ if (err >= 0)
+ /* ignore flag return values such as a mod being blacklisted */
+ err = 0;
+ else {
+ switch (err) {
+ case -EEXIST:
+ ERR("could not insert '%s': Module already in kernel\n",
+ kmod_module_get_name(mod));
+ break;
+ case -ENOENT:
+ ERR("could not insert '%s': Unknown symbol in module, "
+ "or unknown parameter (see dmesg)\n",
+ kmod_module_get_name(mod));
+ break;
+ default:
+ ERR("could not insert '%s': %s\n",
+ kmod_module_get_name(mod),
+ strerror(-err));
+ break;
+ }
+ }
+
+ return err;
+}
+
static int insmod(struct kmod_ctx *ctx, const char *alias,
const char *extra_options)
{
struct kmod_list *l, *list = NULL;
int err, flags = 0;
- void (*show)(struct kmod_module *m, bool install,
- const char *options) = NULL;
-
err = kmod_module_new_from_lookup(ctx, alias, &list);
if (list == NULL || err < 0) {
@@ -596,8 +634,6 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
flags |= KMOD_PROBE_IGNORE_LOADED;
if (dry_run)
flags |= KMOD_PROBE_DRY_RUN;
- if (do_show || verbose > DEFAULT_VERBOSE)
- show = &print_action;
flags |= KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY;
@@ -608,36 +644,7 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
kmod_list_foreach(l, list) {
struct kmod_module *mod = kmod_module_get_module(l);
-
- if (lookup_only)
- printf("%s\n", kmod_module_get_name(mod));
- else {
- err = kmod_module_probe_insert_module(mod, flags,
- extra_options, NULL, NULL, show);
- }
-
- if (err >= 0)
- /* ignore flag return values such as a mod being blacklisted */
- err = 0;
- else {
- switch (err) {
- case -EEXIST:
- ERR("could not insert '%s': Module already in kernel\n",
- kmod_module_get_name(mod));
- break;
- case -ENOENT:
- ERR("could not insert '%s': Unknown symbol in module, "
- "or unknown parameter (see dmesg)\n",
- kmod_module_get_name(mod));
- break;
- default:
- ERR("could not insert '%s': %s\n",
- kmod_module_get_name(mod),
- strerror(-err));
- break;
- }
- }
-
+ err = insmod_insert(mod, flags, extra_options);
kmod_module_unref(mod);
}