From: Chandra Seetharaman In 2.6.17, there was a problem with cpu_notifiers and XFS. I provided a band-aid solution to solve that problem. In the process, i undid all the changes you both were making to ensure that these notifiers were available only at init time (unless CONFIG_HOTPLUG_CPU is defined). We deferred the real fix to 2.6.18. Here is a set of patches that fixes the XFS problem cleanly and makes the cpu notifiers available only at init time (unless CONFIG_HOTPLUG_CPU is defined). If CONFIG_HOTPLUG_CPU is defined then cpu notifiers are available at run time. This patch reverts the notifier_call changes made in 2.6.17 Signed-off-by: Chandra Seetharaman Cc: Ashok Raj Signed-off-by: Andrew Morton --- arch/i386/kernel/cpu/intel_cacheinfo.c | 2 +- arch/ia64/kernel/palinfo.c | 2 +- arch/ia64/kernel/salinfo.c | 2 +- arch/ia64/kernel/topology.c | 2 +- arch/powerpc/kernel/sysfs.c | 2 +- arch/x86_64/kernel/mce.c | 2 +- drivers/base/topology.c | 2 +- drivers/cpufreq/cpufreq.c | 2 +- kernel/hrtimer.c | 2 +- kernel/profile.c | 2 +- kernel/rcupdate.c | 2 +- kernel/softirq.c | 2 +- kernel/softlockup.c | 2 +- kernel/timer.c | 2 +- kernel/workqueue.c | 2 +- mm/page_alloc.c | 2 +- mm/slab.c | 2 +- mm/vmscan.c | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff -puN arch/i386/kernel/cpu/intel_cacheinfo.c~cpu-hotplug-revert-init-patch-submitted-for-2617 arch/i386/kernel/cpu/intel_cacheinfo.c --- a/arch/i386/kernel/cpu/intel_cacheinfo.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/arch/i386/kernel/cpu/intel_cacheinfo.c @@ -729,7 +729,7 @@ static void __cpuexit cache_remove_dev(s return; } -static int cacheinfo_cpu_callback(struct notifier_block *nfb, +static int __cpuinit cacheinfo_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; diff -puN arch/ia64/kernel/palinfo.c~cpu-hotplug-revert-init-patch-submitted-for-2617 arch/ia64/kernel/palinfo.c --- a/arch/ia64/kernel/palinfo.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/arch/ia64/kernel/palinfo.c @@ -959,7 +959,7 @@ remove_palinfo_proc_entries(unsigned int } } -static int palinfo_cpu_callback(struct notifier_block *nfb, +static int __devinit palinfo_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { diff -puN arch/ia64/kernel/salinfo.c~cpu-hotplug-revert-init-patch-submitted-for-2617 arch/ia64/kernel/salinfo.c --- a/arch/ia64/kernel/salinfo.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/arch/ia64/kernel/salinfo.c @@ -572,7 +572,7 @@ static struct file_operations salinfo_da }; #ifdef CONFIG_HOTPLUG_CPU -static int +static int __devinit salinfo_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) { unsigned int i, cpu = (unsigned long)hcpu; diff -puN arch/ia64/kernel/topology.c~cpu-hotplug-revert-init-patch-submitted-for-2617 arch/ia64/kernel/topology.c --- a/arch/ia64/kernel/topology.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/arch/ia64/kernel/topology.c @@ -404,7 +404,7 @@ static int __cpuinit cache_remove_dev(st * When a cpu is hot-plugged, do a check and initiate * cache kobject if necessary */ -static int cache_cpu_callback(struct notifier_block *nfb, +static int __cpuinit cache_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; diff -puN arch/powerpc/kernel/sysfs.c~cpu-hotplug-revert-init-patch-submitted-for-2617 arch/powerpc/kernel/sysfs.c --- a/arch/powerpc/kernel/sysfs.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/arch/powerpc/kernel/sysfs.c @@ -279,7 +279,7 @@ static void unregister_cpu_online(unsign } #endif /* CONFIG_HOTPLUG_CPU */ -static int sysfs_cpu_notify(struct notifier_block *self, +static int __devinit sysfs_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned int)(long)hcpu; diff -puN arch/x86_64/kernel/mce.c~cpu-hotplug-revert-init-patch-submitted-for-2617 arch/x86_64/kernel/mce.c --- a/arch/x86_64/kernel/mce.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/arch/x86_64/kernel/mce.c @@ -629,7 +629,7 @@ static __cpuinit void mce_remove_device( #endif /* Get notified when a cpu comes on/off. Be hotplug friendly. */ -static int +static __cpuinit int mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; diff -puN drivers/base/topology.c~cpu-hotplug-revert-init-patch-submitted-for-2617 drivers/base/topology.c --- a/drivers/base/topology.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/drivers/base/topology.c @@ -107,7 +107,7 @@ static int __cpuinit topology_remove_dev return 0; } -static int topology_cpu_callback(struct notifier_block *nfb, +static int __cpuinit topology_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; diff -puN drivers/cpufreq/cpufreq.c~cpu-hotplug-revert-init-patch-submitted-for-2617 drivers/cpufreq/cpufreq.c --- a/drivers/cpufreq/cpufreq.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/drivers/cpufreq/cpufreq.c @@ -1497,7 +1497,7 @@ int cpufreq_update_policy(unsigned int c } EXPORT_SYMBOL(cpufreq_update_policy); -static int cpufreq_cpu_callback(struct notifier_block *nfb, +static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; diff -puN kernel/hrtimer.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/hrtimer.c --- a/kernel/hrtimer.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/hrtimer.c @@ -833,7 +833,7 @@ static void migrate_hrtimers(int cpu) } #endif /* CONFIG_HOTPLUG_CPU */ -static int hrtimer_cpu_notify(struct notifier_block *self, +static int __devinit hrtimer_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { long cpu = (long)hcpu; diff -puN kernel/profile.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/profile.c --- a/kernel/profile.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/profile.c @@ -299,7 +299,7 @@ out: } #ifdef CONFIG_HOTPLUG_CPU -static int profile_cpu_callback(struct notifier_block *info, +static int __devinit profile_cpu_callback(struct notifier_block *info, unsigned long action, void *__cpu) { int node, cpu = (unsigned long)__cpu; diff -puN kernel/rcupdate.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/rcupdate.c --- a/kernel/rcupdate.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/rcupdate.c @@ -539,7 +539,7 @@ static void __devinit rcu_online_cpu(int tasklet_init(&per_cpu(rcu_tasklet, cpu), rcu_process_callbacks, 0UL); } -static int rcu_cpu_notify(struct notifier_block *self, +static int __devinit rcu_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { long cpu = (long)hcpu; diff -puN kernel/softirq.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/softirq.c --- a/kernel/softirq.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/softirq.c @@ -446,7 +446,7 @@ static void takeover_tasklets(unsigned i } #endif /* CONFIG_HOTPLUG_CPU */ -static int cpu_callback(struct notifier_block *nfb, +static int __devinit cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { diff -puN kernel/softlockup.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/softlockup.c --- a/kernel/softlockup.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/softlockup.c @@ -104,7 +104,7 @@ static int watchdog(void * __bind_cpu) /* * Create/destroy watchdog threads as CPUs come and go: */ -static int +static int __devinit cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { int hotcpu = (unsigned long)hcpu; diff -puN kernel/timer.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/timer.c --- a/kernel/timer.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/timer.c @@ -1326,7 +1326,7 @@ static void __devinit migrate_timers(int } #endif /* CONFIG_HOTPLUG_CPU */ -static int timer_cpu_notify(struct notifier_block *self, +static int __devinit timer_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { long cpu = (long)hcpu; diff -puN kernel/workqueue.c~cpu-hotplug-revert-init-patch-submitted-for-2617 kernel/workqueue.c --- a/kernel/workqueue.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/kernel/workqueue.c @@ -559,7 +559,7 @@ static void take_over_work(struct workqu } /* We're holding the cpucontrol mutex here */ -static int workqueue_cpu_callback(struct notifier_block *nfb, +static int __devinit workqueue_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { diff -puN mm/page_alloc.c~cpu-hotplug-revert-init-patch-submitted-for-2617 mm/page_alloc.c --- a/mm/page_alloc.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/mm/page_alloc.c @@ -1871,7 +1871,7 @@ static inline void free_zone_pagesets(in } } -static int pageset_cpuup_callback(struct notifier_block *nfb, +static int __cpuinit pageset_cpuup_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { diff -puN mm/slab.c~cpu-hotplug-revert-init-patch-submitted-for-2617 mm/slab.c --- a/mm/slab.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/mm/slab.c @@ -1073,7 +1073,7 @@ static inline int cache_free_alien(struc #endif -static int cpuup_callback(struct notifier_block *nfb, +static int __devinit cpuup_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { long cpu = (long)hcpu; diff -puN mm/vmscan.c~cpu-hotplug-revert-init-patch-submitted-for-2617 mm/vmscan.c --- a/mm/vmscan.c~cpu-hotplug-revert-init-patch-submitted-for-2617 +++ a/mm/vmscan.c @@ -1445,7 +1445,7 @@ out: not required for correctness. So if the last cpu in a node goes away, we get changed to run anywhere: as the first one comes back, restore their cpu bindings. */ -static int cpu_callback(struct notifier_block *nfb, +static int __devinit cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { pg_data_t *pgdat; _