In previous code design, the zs_exit() will be called by zs_init(). So function zs_exit() is located before zs_init(). And after patch [1], the zs_exit() will not be called by zs_init(). So we can move the zs_exit() after zs_init() and put these two module init/exit functions to the end of the file which is the common style.
[1] mm/zsmalloc: avoid unregister a NOT-registered zsmalloc zpool driver Signed-off-by: Mahendran Ganesh <opensource.gan...@gmail.com> --- mm/zsmalloc.c | 96 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 92af030..4fcb7c9 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -881,54 +881,6 @@ static struct notifier_block zs_cpu_nb = { .notifier_call = zs_cpu_notifier }; -static void __exit zs_exit(void) -{ - int cpu; - -#ifdef CONFIG_ZPOOL - zpool_unregister_driver(&zs_zpool_driver); -#endif - - cpu_notifier_register_begin(); - - for_each_online_cpu(cpu) - zs_cpu_notifier(NULL, CPU_DEAD, (void *)(long)cpu); - __unregister_cpu_notifier(&zs_cpu_nb); - - cpu_notifier_register_done(); -} - -static int __init zs_init(void) -{ - int cpu, ret; - - cpu_notifier_register_begin(); - - __register_cpu_notifier(&zs_cpu_nb); - for_each_online_cpu(cpu) { - ret = zs_cpu_notifier(NULL, CPU_UP_PREPARE, (void *)(long)cpu); - if (notifier_to_errno(ret)) - goto fail; - } - - cpu_notifier_register_done(); - -#ifdef CONFIG_ZPOOL - zpool_register_driver(&zs_zpool_driver); -#endif - - return 0; - -fail: - for_each_online_cpu(cpu) - zs_cpu_notifier(NULL, CPU_UP_CANCELED, (void *)(long)cpu); - __unregister_cpu_notifier(&zs_cpu_nb); - - cpu_notifier_register_done(); - - return notifier_to_errno(ret); -} - /** * zs_create_pool - Creates an allocation pool to work from. * @flags: allocation flags used to allocate pool metadata @@ -1187,6 +1139,54 @@ unsigned long zs_get_total_pages(struct zs_pool *pool) } EXPORT_SYMBOL_GPL(zs_get_total_pages); +static int __init zs_init(void) +{ + int cpu, ret; + + cpu_notifier_register_begin(); + + __register_cpu_notifier(&zs_cpu_nb); + for_each_online_cpu(cpu) { + ret = zs_cpu_notifier(NULL, CPU_UP_PREPARE, (void *)(long)cpu); + if (notifier_to_errno(ret)) + goto fail; + } + + cpu_notifier_register_done(); + +#ifdef CONFIG_ZPOOL + zpool_register_driver(&zs_zpool_driver); +#endif + + return 0; + +fail: + for_each_online_cpu(cpu) + zs_cpu_notifier(NULL, CPU_UP_CANCELED, (void *)(long)cpu); + __unregister_cpu_notifier(&zs_cpu_nb); + + cpu_notifier_register_done(); + + return notifier_to_errno(ret); +} + +static void __exit zs_exit(void) +{ + int cpu; + +#ifdef CONFIG_ZPOOL + zpool_unregister_driver(&zs_zpool_driver); +#endif + + cpu_notifier_register_begin(); + + for_each_online_cpu(cpu) + zs_cpu_notifier(NULL, CPU_DEAD, (void *)(long)cpu); + __unregister_cpu_notifier(&zs_cpu_nb); + + cpu_notifier_register_done(); +} + module_init(zs_init); module_exit(zs_exit); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/