From 7c10c69c72a5639048d75b681395ecf72193ba7f Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 30 Jan 2012 18:54:45 -0200 Subject: [PATCH] libkmod-module: probe: add flag to ignore loaded modules We need a way to tell libkmod to ignore loaded modules, so modprobe can tell it to dry-run and show dependencies. However there's a conflict with two flags. KMOD_PROBE_STOP_ON_ALREADY_LOADED prevails if passed together with KMOD_PROBE_IGNORE_LOADED. --- libkmod/libkmod-module.c | 14 +++++++++----- libkmod/libkmod.h | 1 + 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c index a85eeeaf..1229a95b 100644 --- a/libkmod/libkmod-module.c +++ b/libkmod/libkmod-module.c @@ -1172,7 +1172,12 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod, err = module_do_install_commands(m, options, &cb); } else { - int state = kmod_module_get_initstate(m); + int state; + + if (flags & KMOD_PROBE_IGNORE_LOADED) + state = -1; + else + state = kmod_module_get_initstate(m); if (state == KMOD_MODULE_LIVE || state == KMOD_MODULE_COMING || @@ -1182,10 +1187,9 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod, break; } - DBG(mod->ctx, "Ignoring '%s': " - "module already loaded\n", m->name); - free(options); - continue; + DBG(mod->ctx, "Ignoring module '%s': " + "already loaded\n", m->name); + err = 0; } if (print_action != NULL) print_action(m, false, options ?: ""); diff --git a/libkmod/libkmod.h b/libkmod/libkmod.h index a9f6dfcd..cf4a7b7b 100644 --- a/libkmod/libkmod.h +++ b/libkmod/libkmod.h @@ -128,6 +128,7 @@ enum kmod_probe { KMOD_PROBE_FORCE_VERMAGIC = 0x00001, KMOD_PROBE_FORCE_MODVERSION = 0x00002, KMOD_PROBE_IGNORE_COMMAND = 0x00004, + KMOD_PROBE_IGNORE_LOADED = 0x00008, /* codes below can be used in return value, too */ KMOD_PROBE_APPLY_BLACKLIST_ALL = 0x10000, -- 2.47.3