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

John Crispin john at phrozen.org
Fri Jan 27 03:04:26 PST 2017



On 27/01/2017 11:38, Kevin Darbyshire-Bryant wrote:
> 
> 
> On 27/01/17 10:36, John Crispin wrote:
>>
>>
>> On 27/01/2017 11:33, Kevin Darbyshire-Bryant wrote:
>>> 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.
>>>
>>> Signed-off-by: Kevin Darbyshire-Bryant <kevin at darbyshire-bryant.me.uk>
>>> ---
>>>  kmodloader.c | 35 +++++++++++++++++++++++++----------
>>>  1 file changed, 25 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/kmodloader.c b/kmodloader.c
>>> index 729027a..52a745f 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,23 @@ 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 +858,10 @@ 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;
>>
>> i can see why we would want to silence this one
>>
>>>      } 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);
>>
>> but do we really want to silence this error ?
> 
> From the manpage
> 
>        -q, --quiet
>            With this flag, modprobe won't print an error message if you
> try to remove or insert a module it can't find (and
>            isn't an alias or install/remove command). However, it will
> still return with a non-zero exit status. The kernel uses
>            this to opportunistically probe for modules which might exist
> using request_module.
> 

i guess the man page is correct ;)

> 
>>
>>>      } else {
>>>          int fail;
>>>
>>>



More information about the Lede-dev mailing list