modprobe: read modules.builtin
This allows explicit probing to succeed when the requested module is actually built-in, and corrects the error message for removal. Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
9c192e7f94
commit
803c85a207
@ -171,6 +171,7 @@ static const char modprobe_longopts[] ALIGN1 =
|
|||||||
/* "was seen in modules.dep": */
|
/* "was seen in modules.dep": */
|
||||||
#define MODULE_FLAG_FOUND_IN_MODDEP 0x0004
|
#define MODULE_FLAG_FOUND_IN_MODDEP 0x0004
|
||||||
#define MODULE_FLAG_BLACKLISTED 0x0008
|
#define MODULE_FLAG_BLACKLISTED 0x0008
|
||||||
|
#define MODULE_FLAG_BUILTIN 0x0010
|
||||||
|
|
||||||
struct globals {
|
struct globals {
|
||||||
llist_t *probes; /* MEs of module(s) requested on cmdline */
|
llist_t *probes; /* MEs of module(s) requested on cmdline */
|
||||||
@ -217,7 +218,7 @@ static void add_probe(const char *name)
|
|||||||
|
|
||||||
m = get_or_add_modentry(name);
|
m = get_or_add_modentry(name);
|
||||||
if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS))
|
if (!(option_mask32 & (OPT_REMOVE | OPT_SHOW_DEPS))
|
||||||
&& (m->flags & MODULE_FLAG_LOADED)
|
&& (m->flags & (MODULE_FLAG_LOADED | MODULE_FLAG_BUILTIN))
|
||||||
) {
|
) {
|
||||||
DBG("skipping %s, it is already loaded", name);
|
DBG("skipping %s, it is already loaded", name);
|
||||||
return;
|
return;
|
||||||
@ -413,8 +414,10 @@ static int do_modprobe(struct module_entry *m)
|
|||||||
|
|
||||||
if (!(m->flags & MODULE_FLAG_FOUND_IN_MODDEP)) {
|
if (!(m->flags & MODULE_FLAG_FOUND_IN_MODDEP)) {
|
||||||
if (!(option_mask32 & INSMOD_OPT_SILENT))
|
if (!(option_mask32 & INSMOD_OPT_SILENT))
|
||||||
bb_error_msg("module %s not found in modules.dep",
|
bb_error_msg((m->flags & MODULE_FLAG_BUILTIN) ?
|
||||||
humanly_readable_name(m));
|
"module %s is builtin" :
|
||||||
|
"module %s not found in modules.dep",
|
||||||
|
humanly_readable_name(m));
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
DBG("do_modprob'ing %s", m->modname);
|
DBG("do_modprob'ing %s", m->modname);
|
||||||
@ -618,6 +621,11 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
while (config_read(parser, &s, 1, 1, "# \t", PARSE_NORMAL & ~PARSE_GREEDY))
|
while (config_read(parser, &s, 1, 1, "# \t", PARSE_NORMAL & ~PARSE_GREEDY))
|
||||||
get_or_add_modentry(s)->flags |= MODULE_FLAG_LOADED;
|
get_or_add_modentry(s)->flags |= MODULE_FLAG_LOADED;
|
||||||
config_close(parser);
|
config_close(parser);
|
||||||
|
|
||||||
|
parser = config_open2("modules.builtin", fopen_for_read);
|
||||||
|
while (config_read(parser, &s, 1, 1, "# \t", PARSE_NORMAL))
|
||||||
|
get_or_add_modentry(s)->flags |= MODULE_FLAG_BUILTIN;
|
||||||
|
config_close(parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt & (OPT_INSERT_ALL | OPT_REMOVE)) {
|
if (opt & (OPT_INSERT_ALL | OPT_REMOVE)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user