|
@@ -37,8 +37,10 @@
|
|
|
#include "debug.h"
|
|
|
#ifdef CONFIG_RAMSTER
|
|
|
static bool ramster_enabled __read_mostly;
|
|
|
+static int disable_frontswap_selfshrink;
|
|
|
#else
|
|
|
#define ramster_enabled false
|
|
|
+#define disable_frontswap_selfshrink 0
|
|
|
#endif
|
|
|
|
|
|
#ifndef __PG_WAS_ACTIVE
|
|
@@ -81,8 +83,12 @@ static char *namestr __read_mostly = "zcache";
|
|
|
(__GFP_FS | __GFP_NORETRY | __GFP_NOWARN | __GFP_NOMEMALLOC)
|
|
|
|
|
|
/* crypto API for zcache */
|
|
|
+#ifdef CONFIG_ZCACHE_MODULE
|
|
|
+static char *zcache_comp_name = "lzo";
|
|
|
+#else
|
|
|
#define ZCACHE_COMP_NAME_SZ CRYPTO_MAX_ALG_NAME
|
|
|
static char zcache_comp_name[ZCACHE_COMP_NAME_SZ] __read_mostly;
|
|
|
+#endif
|
|
|
static struct crypto_comp * __percpu *zcache_comp_pcpu_tfms __read_mostly;
|
|
|
|
|
|
enum comp_op {
|
|
@@ -1721,6 +1727,7 @@ struct frontswap_ops *zcache_frontswap_register_ops(void)
|
|
|
* OR NOTHING HAPPENS!
|
|
|
*/
|
|
|
|
|
|
+#ifndef CONFIG_ZCACHE_MODULE
|
|
|
static int __init enable_zcache(char *s)
|
|
|
{
|
|
|
zcache_enabled = true;
|
|
@@ -1787,18 +1794,27 @@ static int __init enable_zcache_compressor(char *s)
|
|
|
return 1;
|
|
|
}
|
|
|
__setup("zcache=", enable_zcache_compressor);
|
|
|
+#endif
|
|
|
|
|
|
|
|
|
-static int __init zcache_comp_init(void)
|
|
|
+static int zcache_comp_init(void)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
/* check crypto algorithm */
|
|
|
+#ifdef CONFIG_ZCACHE_MODULE
|
|
|
+ ret = crypto_has_comp(zcache_comp_name, 0, 0);
|
|
|
+ if (!ret) {
|
|
|
+ ret = -1;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+#else
|
|
|
if (*zcache_comp_name != '\0') {
|
|
|
ret = crypto_has_comp(zcache_comp_name, 0, 0);
|
|
|
if (!ret)
|
|
|
pr_info("zcache: %s not supported\n",
|
|
|
zcache_comp_name);
|
|
|
+ goto out;
|
|
|
}
|
|
|
if (!ret)
|
|
|
strcpy(zcache_comp_name, "lzo");
|
|
@@ -1807,6 +1823,7 @@ static int __init zcache_comp_init(void)
|
|
|
ret = 1;
|
|
|
goto out;
|
|
|
}
|
|
|
+#endif
|
|
|
pr_info("zcache: using %s compressor\n", zcache_comp_name);
|
|
|
|
|
|
/* alloc percpu transforms */
|
|
@@ -1818,10 +1835,13 @@ out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int __init zcache_init(void)
|
|
|
+static int zcache_init(void)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
+#ifdef CONFIG_ZCACHE_MODULE
|
|
|
+ zcache_enabled = 1;
|
|
|
+#endif
|
|
|
if (ramster_enabled) {
|
|
|
namestr = "ramster";
|
|
|
ramster_register_pamops(&zcache_pamops);
|
|
@@ -1894,9 +1914,28 @@ static int __init zcache_init(void)
|
|
|
}
|
|
|
if (ramster_enabled)
|
|
|
ramster_init(!disable_cleancache, !disable_frontswap,
|
|
|
- frontswap_has_exclusive_gets, false);
|
|
|
+ frontswap_has_exclusive_gets,
|
|
|
+ !disable_frontswap_selfshrink);
|
|
|
out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_ZCACHE_MODULE
|
|
|
+#ifdef CONFIG_RAMSTER
|
|
|
+module_param(ramster_enabled, int, S_IRUGO);
|
|
|
+module_param(disable_frontswap_selfshrink, int, S_IRUGO);
|
|
|
+#endif
|
|
|
+module_param(disable_cleancache, int, S_IRUGO);
|
|
|
+module_param(disable_frontswap, int, S_IRUGO);
|
|
|
+#ifdef FRONTSWAP_HAS_EXCLUSIVE_GETS
|
|
|
+module_param(frontswap_has_exclusive_gets, bool, S_IRUGO);
|
|
|
+#endif
|
|
|
+module_param(disable_frontswap_ignore_nonactive, int, S_IRUGO);
|
|
|
+module_param(zcache_comp_name, charp, S_IRUGO);
|
|
|
+module_init(zcache_init);
|
|
|
+MODULE_LICENSE("GPL");
|
|
|
+MODULE_AUTHOR("Dan Magenheimer <dan.magenheimer@oracle.com>");
|
|
|
+MODULE_DESCRIPTION("In-kernel compression of cleancache/frontswap pages");
|
|
|
+#else
|
|
|
late_initcall(zcache_init);
|
|
|
+#endif
|