xfs: Register hotcpu notifier after initialization
Currently the code initializizes mp->m_icsb_mutex and other things _after_ register_hotcpu_notifier(). As the notifier takes mp->m_icsb_mutex it can happen that it takes the lock before it's initialization. Signed-off-by: Richard Weinberger <richard@nod.at> Reviewed-by: Ben Myers <bpm@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
3e3c51cee9
commit
46677e679f
|
@ -1548,12 +1548,6 @@ xfs_icsb_init_counters(
|
||||||
if (mp->m_sb_cnts == NULL)
|
if (mp->m_sb_cnts == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
|
||||||
mp->m_icsb_notifier.notifier_call = xfs_icsb_cpu_notify;
|
|
||||||
mp->m_icsb_notifier.priority = 0;
|
|
||||||
register_hotcpu_notifier(&mp->m_icsb_notifier);
|
|
||||||
#endif /* CONFIG_HOTPLUG_CPU */
|
|
||||||
|
|
||||||
for_each_online_cpu(i) {
|
for_each_online_cpu(i) {
|
||||||
cntp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, i);
|
cntp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, i);
|
||||||
memset(cntp, 0, sizeof(xfs_icsb_cnts_t));
|
memset(cntp, 0, sizeof(xfs_icsb_cnts_t));
|
||||||
|
@ -1566,6 +1560,13 @@ xfs_icsb_init_counters(
|
||||||
* initial balance kicks us off correctly
|
* initial balance kicks us off correctly
|
||||||
*/
|
*/
|
||||||
mp->m_icsb_counters = -1;
|
mp->m_icsb_counters = -1;
|
||||||
|
|
||||||
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
mp->m_icsb_notifier.notifier_call = xfs_icsb_cpu_notify;
|
||||||
|
mp->m_icsb_notifier.priority = 0;
|
||||||
|
register_hotcpu_notifier(&mp->m_icsb_notifier);
|
||||||
|
#endif /* CONFIG_HOTPLUG_CPU */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue