2013-05-25 08:09:58

by Andrew Jones

[permalink] [raw]
Subject: [PATCH] modules: insert mods sorted

While there isn't a big difference between typing 'lsmod' and
'lsmod | sort', the module listing in Oopses isn't so easily sorted.
Attempting to search these quickly by eye for particular modules while
rapidly triaging bugs can be a pain. Sort the list and reduce the pain.

Signed-off-by: Andrew Jones <[email protected]>
---
kernel/module.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/kernel/module.c b/kernel/module.c
index cab4bce49c23d..7914d8ef2e09c 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -3146,7 +3146,7 @@ static int may_init_module(void)
static int add_unformed_module(struct module *mod)
{
int err;
- struct module *old;
+ struct module *old, *m;

mod->state = MODULE_STATE_UNFORMED;

@@ -3166,7 +3166,13 @@ again:
err = -EEXIST;
goto out;
}
- list_add_rcu(&mod->list, &modules);
+ if (!list_empty(&modules)) {
+ list_for_each_entry(m, &modules, list)
+ if (strcmp(mod->name, m->name) < 0)
+ break;
+ list_add_tail_rcu(&mod->list, &m->list);
+ } else
+ list_add_rcu(&mod->list, &modules);
err = 0;

out:
--
1.8.1.4


2013-05-26 08:26:03

by Andrew Jones

[permalink] [raw]
Subject: Re: [PATCH] modules: insert mods sorted

On Sat, May 25, 2013 at 10:09:46AM +0200, Andrew Jones wrote:
> While there isn't a big difference between typing 'lsmod' and
> 'lsmod | sort', the module listing in Oopses isn't so easily sorted.
> Attempting to search these quickly by eye for particular modules while
> rapidly triaging bugs can be a pain. Sort the list and reduce the pain.
>
> Signed-off-by: Andrew Jones <[email protected]>
> ---
> kernel/module.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/module.c b/kernel/module.c
> index cab4bce49c23d..7914d8ef2e09c 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -3146,7 +3146,7 @@ static int may_init_module(void)
> static int add_unformed_module(struct module *mod)
> {
> int err;
> - struct module *old;
> + struct module *old, *m;
>
> mod->state = MODULE_STATE_UNFORMED;
>
> @@ -3166,7 +3166,13 @@ again:
> err = -EEXIST;
> goto out;
> }
> - list_add_rcu(&mod->list, &modules);
> + if (!list_empty(&modules)) {
> + list_for_each_entry(m, &modules, list)
> + if (strcmp(mod->name, m->name) < 0)
> + break;
> + list_add_tail_rcu(&mod->list, &m->list);
> + } else
> + list_add_rcu(&mod->list, &modules);
> err = 0;
>
> out:
> --
> 1.8.1.4
>

self-nacking. Tons of docs and tools exist expecting this
list in reverse load order. I'll blame the momentary insanity
the drove me to post this patch on having to triage too many
bugs...

drew

2013-05-27 23:06:12

by Rusty Russell

[permalink] [raw]
Subject: Re: [PATCH] modules: insert mods sorted

Andrew Jones <[email protected]> writes:
> While there isn't a big difference between typing 'lsmod' and
> 'lsmod | sort', the module listing in Oopses isn't so easily sorted.
> Attempting to search these quickly by eye for particular modules while
> rapidly triaging bugs can be a pain. Sort the list and reduce the pain.
>
> Signed-off-by: Andrew Jones <[email protected]>

Hi Andrew,

ISTR the story of young Fleming being fired as bottlewasher for
a major lab because the head researcher felt he was wasting his
talents.[1]

Please take my rejection of this patch as similar endorsement of
your future prospects.

Cheers,
Rusty.
[1] Google can't find any trace of this story, so may be my imagination...

> ---
> kernel/module.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/module.c b/kernel/module.c
> index cab4bce49c23d..7914d8ef2e09c 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -3146,7 +3146,7 @@ static int may_init_module(void)
> static int add_unformed_module(struct module *mod)
> {
> int err;
> - struct module *old;
> + struct module *old, *m;
>
> mod->state = MODULE_STATE_UNFORMED;
>
> @@ -3166,7 +3166,13 @@ again:
> err = -EEXIST;
> goto out;
> }
> - list_add_rcu(&mod->list, &modules);
> + if (!list_empty(&modules)) {
> + list_for_each_entry(m, &modules, list)
> + if (strcmp(mod->name, m->name) < 0)
> + break;
> + list_add_tail_rcu(&mod->list, &m->list);
> + } else
> + list_add_rcu(&mod->list, &modules);
> err = 0;
>
> out:
> --
> 1.8.1.4