summaryrefslogtreecommitdiff
path: root/drivers/block/zram/zcomp.c
diff options
context:
space:
mode:
authorSergey Senozhatsky <sergey.senozhatsky@gmail.com>2014-04-07 15:38:17 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2014-04-07 16:36:01 -0700
commite46b8a030d76d3c94156c545c3f4c3676d813435 (patch)
tree9629389f89d3086a6428ec6a8e47bc59ddfcf3ec /drivers/block/zram/zcomp.c
parentfe8eb122c82b2049c460fc6df6e8583a2f935cff (diff)
zram: make compression algorithm selection possible
Add and document `comp_algorithm' device attribute. This attribute allows to show supported compression and currently selected compression algorithms: cat /sys/block/zram0/comp_algorithm [lzo] lz4 and change selected compression algorithm: echo lzo > /sys/block/zram0/comp_algorithm Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Acked-by: Minchan Kim <minchan@kernel.org> Cc: Jerome Marchand <jmarchan@redhat.com> Cc: Nitin Gupta <ngupta@vflare.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/block/zram/zcomp.c')
-rw-r--r--drivers/block/zram/zcomp.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index ac276f79f21c..aad533a8bc55 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -39,11 +39,20 @@ struct zcomp_strm_multi {
wait_queue_head_t strm_wait;
};
+static struct zcomp_backend *backends[] = {
+ &zcomp_lzo,
+ NULL
+};
+
static struct zcomp_backend *find_backend(const char *compress)
{
- if (strncmp(compress, "lzo", 3) == 0)
- return &zcomp_lzo;
- return NULL;
+ int i = 0;
+ while (backends[i]) {
+ if (sysfs_streq(compress, backends[i]->name))
+ break;
+ i++;
+ }
+ return backends[i];
}
static void zcomp_strm_free(struct zcomp *comp, struct zcomp_strm *zstrm)
@@ -251,6 +260,23 @@ static int zcomp_strm_single_create(struct zcomp *comp)
return 0;
}
+/* show available compressors */
+ssize_t zcomp_available_show(const char *comp, char *buf)
+{
+ ssize_t sz = 0;
+ int i = 0;
+
+ while (backends[i]) {
+ if (sysfs_streq(comp, backends[i]->name))
+ sz += sprintf(buf + sz, "[%s] ", backends[i]->name);
+ else
+ sz += sprintf(buf + sz, "%s ", backends[i]->name);
+ i++;
+ }
+ sz += sprintf(buf + sz, "\n");
+ return sz;
+}
+
int zcomp_set_max_streams(struct zcomp *comp, int num_strm)
{
return comp->set_max_streams(comp, num_strm);