Name: More Module Notifiers Signed-off-by: Rusty Russell Status: Trivial Put in the rest of the module notifiers, esp. one when a module is being removed. Index: linux-2.6.10-bk14-Module/kernel/module.c =================================================================== --- linux-2.6.10-bk14-Module.orig/kernel/module.c 2005-01-12 13:09:16.000000000 +1100 +++ linux-2.6.10-bk14-Module/kernel/module.c 2005-01-12 13:26:39.235072512 +1100 @@ -82,6 +82,13 @@ } EXPORT_SYMBOL(unregister_module_notifier); +static void module_notify(struct module *mod, enum module_state state) +{ + down(¬ify_mutex); + notifier_call_chain(&module_notify_list, state, mod); + up(¬ify_mutex); +} + /* We require a truly strong try_module_get() */ static inline int strong_try_module_get(struct module *mod) { @@ -579,6 +586,8 @@ if (ret != 0) goto out; + module_notify(mod, MODULE_STATE_GOING); + /* Never wait if forced. */ if (!forced && module_refcount(mod) != 0) wait_for_zero_refcount(mod); @@ -589,6 +598,7 @@ mod->exit(); down(&module_mutex); } + module_notify(mod, MODULE_STATE_GONE); free_module(mod); out: @@ -1770,9 +1780,7 @@ /* Drop lock so they can recurse */ up(&module_mutex); - down(¬ify_mutex); - notifier_call_chain(&module_notify_list, MODULE_STATE_COMING, mod); - up(¬ify_mutex); + module_notify(mod, MODULE_STATE_COMING); /* Start the module */ if (mod->init != NULL) @@ -1781,12 +1789,14 @@ /* Init routine failed: abort. Try to protect us from buggy refcounters. */ mod->state = MODULE_STATE_GOING; + module_notify(mod, MODULE_STATE_GOING); synchronize_kernel(); if (mod->unsafe) printk(KERN_ERR "%s: module is now stuck!\n", mod->name); else { module_put(mod); + module_notify(mod, MODULE_STATE_GONE); down(&module_mutex); free_module(mod); up(&module_mutex); @@ -1804,6 +1814,7 @@ mod->init_size = 0; mod->init_text_size = 0; up(&module_mutex); + module_notify(mod, MODULE_STATE_LIVE); return 0; } Index: linux-2.6.10-bk14-Module/include/linux/module.h =================================================================== --- linux-2.6.10-bk14-Module.orig/include/linux/module.h 2005-01-12 13:09:11.000000000 +1100 +++ linux-2.6.10-bk14-Module/include/linux/module.h 2005-01-12 13:26:39.236072360 +1100 @@ -217,6 +217,7 @@ MODULE_STATE_LIVE, MODULE_STATE_COMING, MODULE_STATE_GOING, + MODULE_STATE_GONE, /* Only for notifier: module about to be freed */ }; /* Similar stuff for section attributes. */