[patch 2/2] track and print last unloaded module in the oops trace

From: Arjan van de Ven
Date: Sun Jan 06 2008 - 18:20:30 EST



Subject: track and print last unloaded module in the oops trace
From: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx>
CC: rusty@xxxxxxxxxxxxxxx
CC: ak@xxxxxxx
CC: mingo@xxxxxxx

Based on a suggestion from Andi:
In various cases, the unload of a module may leave some bad state around
that causes a kernel crash AFTER a module is unloaded; and it's then hard
to find which module caused that.

This patch tracks the last unloaded module, and prints this as part of the
module list in the oops trace.

Right now, only the last 1 module is tracked; I expect that this is enough
for the vast majority of cases where this information matters; if it turns
out that tracking more is important, we can always extend it to that.

Signed-off-by: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx>

---
kernel/module.c | 6 ++++++
1 file changed, 6 insertions(+)

Index: linux-2.6.24-rc6/kernel/module.c
===================================================================
--- linux-2.6.24-rc6.orig/kernel/module.c
+++ linux-2.6.24-rc6/kernel/module.c
@@ -655,6 +655,8 @@ static void wait_for_zero_refcount(struc
mutex_lock(&module_mutex);
}

+static char last_unloaded_module[MODULE_NAME_LEN+1];
+
asmlinkage long
sys_delete_module(const char __user *name_user, unsigned int flags)
{
@@ -721,6 +723,8 @@ sys_delete_module(const char __user *nam
mod->exit();
mutex_lock(&module_mutex);
}
+ /* Store the name of the last unloaded module for diagnostic purposes */
+ sprintf(last_unloaded_module, mod->name);
free_module(mod);

out:
@@ -2501,6 +2505,8 @@ void print_modules(void)
printk("Modules linked in:");
list_for_each_entry(mod, &modules, list)
printk(" %s%s", mod->name, module_flags(mod, buf));
+ if (last_unloaded_module[0])
+ printk(" [last unloaded: %s]", last_unloaded_module);
printk("\n");
}


--
If you want to reach me at my work email, use arjan@xxxxxxxxxxxxxxx
For development, discussion and tips for power savings,
visit http://www.lesswatts.org
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/