/********************************* * module init and exit **********************************/ static int __init init_zswap(void) { if (!zswap_enabled) return 0; pr_info("loading zswap\n"); if (zswap_entry_cache_create()) { pr_err("entry cache creation failed\n"); goto error; } if (zswap_comp_init()) { pr_err("compressor initialization failed\n"); goto compfail; } if (zswap_cpu_init()) { pr_err("per-cpu initialization failed\n"); goto pcpufail; } frontswap_register_ops(&zswap_frontswap_ops); if (zswap_debugfs_init()) pr_warn("debugfs initialization failed\n"); return 0; pcpufail: zswap_comp_exit(); compfail: zswap_entry_cache_destory(); error: return -ENOMEM; }
/********************************* * module init and exit **********************************/ static int __init init_zswap(void) { gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN | __GFP_HIGHMEM; if (!zswap_enabled) return 0; pr_info("loading zswap\n"); zswap_pool = zpool_create_pool(zswap_zpool_type, gfp, &zswap_zpool_ops); if (!zswap_pool && strcmp(zswap_zpool_type, ZSWAP_ZPOOL_DEFAULT)) { pr_info("%s zpool not available\n", zswap_zpool_type); zswap_zpool_type = ZSWAP_ZPOOL_DEFAULT; zswap_pool = zpool_create_pool(zswap_zpool_type, gfp, &zswap_zpool_ops); } if (!zswap_pool) { pr_err("%s zpool not available\n", zswap_zpool_type); pr_err("zpool creation failed\n"); goto error; } pr_info("using %s pool\n", zswap_zpool_type); if (zswap_entry_cache_create()) { pr_err("entry cache creation failed\n"); goto cachefail; } if (zswap_comp_init()) { pr_err("compressor initialization failed\n"); goto compfail; } if (zswap_cpu_init()) { pr_err("per-cpu initialization failed\n"); goto pcpufail; } frontswap_register_ops(&zswap_frontswap_ops); if (zswap_debugfs_init()) pr_warn("debugfs initialization failed\n"); return 0; pcpufail: zswap_comp_exit(); compfail: zswap_entry_cache_destroy(); cachefail: zpool_destroy_pool(zswap_pool); error: return -ENOMEM; }