Debugging and maintenance support code occasionally needs to know not only of module insertions, but also module removals. Signed-Off-By: Jan Beulich Index: 2.6.14-nlkd/kernel/module.c =================================================================== --- 2.6.14-nlkd.orig/kernel/module.c 2005-11-04 16:19:34.000000000 +0100 +++ 2.6.14-nlkd/kernel/module.c 2005-11-04 16:19:34.000000000 +0100 @@ -1169,6 +1169,10 @@ static void cleanup_kallsyms(struct modu /* Free a module, remove from lists, etc (must hold module mutex). */ static void free_module(struct module *mod) { + down(¬ify_mutex); + notifier_call_chain(&module_notify_list, MODULE_STATE_GOING, mod); + up(¬ify_mutex); + /* Delete from various lists */ stop_machine_run(__unlink_module, mod, NR_CPUS); remove_sect_attrs(mod); @@ -1999,9 +2003,13 @@ sys_init_module(void __user *umod, buggy refcounters. */ mod->state = MODULE_STATE_GOING; synchronize_sched(); - if (mod->unsafe) + if (mod->unsafe) { printk(KERN_ERR "%s: module is now stuck!\n", mod->name); + down(¬ify_mutex); + notifier_call_chain(&module_notify_list, MODULE_STATE_GOING, mod); + up(¬ify_mutex); + } else { module_put(mod); down(&module_mutex);