From: Lucas De Marchi Date: Mon, 30 Jan 2012 20:54:45 +0000 (-0200) Subject: libkmod-module: probe: add flag to ignore loaded modules X-Git-Tag: v5~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c10c69c72a5639048d75b681395ecf72193ba7f;p=thirdparty%2Fkmod.git 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. --- 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,