aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/module.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-10-17 02:26:27 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-17 11:42:49 -0400
commitaf49d9248fca6f26cbdb01918334f71d9040df80 (patch)
tree5d6a7f4d5ca55ff17fbfc98cacac37be62c7a4a3 /kernel/module.c
parentd9c9bef1345e5d9258febce2a37e4d40319fa728 (diff)
Remove "unsafe" from module struct
Adrian Bunk points out that "unsafe" was used to mark modules touched by the deprecated MOD_INC_USE_COUNT interface, which has long gone. It's time to remove the member from the module structure, as well. If you want a module which can't unload, don't register an exit function. (Vlad Yasevich says SCTP is now safe to unload, so just remove the __unsafe there). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Shannon Nelson <shannon.nelson@intel.com> Acked-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Vlad Yasevich <vladislav.yasevich@hp.com> Cc: Sridhar Samudrala <sri@us.ibm.com> Cc: Adrian Bunk <bunk@stusta.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/module.c')
-rw-r--r--kernel/module.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/kernel/module.c b/kernel/module.c
index db0ead0363e2..35246a61a7e9 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -692,8 +692,7 @@ sys_delete_module(const char __user *name_user, unsigned int flags)
692 } 692 }
693 693
694 /* If it has an init func, it must have an exit func to unload */ 694 /* If it has an init func, it must have an exit func to unload */
695 if ((mod->init != NULL && mod->exit == NULL) 695 if (mod->init && !mod->exit) {
696 || mod->unsafe) {
697 forced = try_force_unload(flags); 696 forced = try_force_unload(flags);
698 if (!forced) { 697 if (!forced) {
699 /* This module can't be removed */ 698 /* This module can't be removed */
@@ -741,11 +740,6 @@ static void print_unload_info(struct seq_file *m, struct module *mod)
741 seq_printf(m, "%s,", use->module_which_uses->name); 740 seq_printf(m, "%s,", use->module_which_uses->name);
742 } 741 }
743 742
744 if (mod->unsafe) {
745 printed_something = 1;
746 seq_printf(m, "[unsafe],");
747 }
748
749 if (mod->init != NULL && mod->exit == NULL) { 743 if (mod->init != NULL && mod->exit == NULL) {
750 printed_something = 1; 744 printed_something = 1;
751 seq_printf(m, "[permanent],"); 745 seq_printf(m, "[permanent],");
@@ -2011,15 +2005,10 @@ sys_init_module(void __user *umod,
2011 buggy refcounters. */ 2005 buggy refcounters. */
2012 mod->state = MODULE_STATE_GOING; 2006 mod->state = MODULE_STATE_GOING;
2013 synchronize_sched(); 2007 synchronize_sched();
2014 if (mod->unsafe) 2008 module_put(mod);
2015 printk(KERN_ERR "%s: module is now stuck!\n", 2009 mutex_lock(&module_mutex);
2016 mod->name); 2010 free_module(mod);
2017 else { 2011 mutex_unlock(&module_mutex);
2018 module_put(mod);
2019 mutex_lock(&module_mutex);
2020 free_module(mod);
2021 mutex_unlock(&module_mutex);
2022 }
2023 return ret; 2012 return ret;
2024 } 2013 }
2025 2014