modules: don't print out loaded modules too often if nothing changed
PATCH 1/1 modules: don't print out loaded modules too often if nothing changed
List of loaded modules is useful but printing it at each splat adds too much noise. This patch prints place-holder "<unchanged>" if kernel not in panic, nothing have changed and since last print passed less then 15 minutes. First warning will have it for sure.
Signed-off-by Konstantin Khlebnikov <[email protected]>
--- kernel/module.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
kernel/module.c +13 -0
@@ -101,6 +101,7 @@DEFINE_MUTEX (module_mutex);EXPORT_SYMBOL_GPL (module_mutex);static LIST_HEAD (modules); +static unsigned long modules_printed;#ifdef CONFIG_MODULES_TREE_LOOKUP
@@ -1005,6 +1006,7 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,/* Store the name of the last unloaded module for diagnostic purposes */ strlcpy (last_unloaded_module, mod->name,sizeof (last_unloaded_module)); + modules_printed =0 ;free_module (mod);return 0 ;
@@ -2019,6 +2021,7 @@ static void free_module(struct module *mod)/* Unlink carefully: kallsyms could be walking list. */ list_del_rcu (&mod->list);mod_tree_remove (mod); + modules_printed =0 ;/* Remove this module from bug list, this uses list_del_rcu */ module_bug_cleanup (mod);/* Wait for RCU-sched synchronizing before releasing mod->list and buglist. */
@@ -3343,6 +3346,7 @@ again:mod_update_bounds (mod);list_add_rcu (&mod->list, &modules);mod_tree_insert (mod); + modules_printed =0 ; err =0 ; out:
@@ -3558,6 +3562,7 @@ static int load_module(struct load_info *info, const char __user *uargs,/* Unlink carefully: kallsyms could be walking list. */ list_del_rcu (&mod->list);mod_tree_remove (mod); + modules_printed =0 ;wake_up_all (&module_wq);/* Wait for RCU-sched synchronizing before releasing mod->list. */ synchronize_sched ();
@@ -4058,6 +4063,14 @@ void print_modules(void)char buf[8 ];printk (KERN_DEFAULT "Modules linked in:" ); + +if (!oops_in_progress && modules_printed && +time_before (jiffies, modules_printed +HZ *60 *15 )) { +pr_cont (" <unchanged>\n" ); +return ; + } + modules_printed = jiffies; +/* Most callers should already have preempt disabled, but make sure */ preempt_disable ();list_for_each_entry_rcu (mod, &modules, list) {