Messages in this thread Patch in this message | | | From | Sergey Senozhatsky <> | Subject | [PATCH] zram: check comp algorithm availability earlier | Date | Tue, 26 May 2015 22:13:37 +0900 |
| |
Improvement idea by Marcin Jabrzyk.
comp_algorithm_store() silently accepts any supplied algorithm name, because zram performs algorithm availability check later, during the device configuration phase in disksize_store() and prints "zram: Cannot initialise %s compressing backend" to syslog. this error line is somewhat generic and, besides, can indicate a failed attempt to allocate compression backend's working buffers.
make algorithm availability check earlier, in comp_algorithm_store(), and be move verbose:
echo lzz > /sys/block/zram0/comp_algorithm -bash: echo: write error: Invalid argument
dmesg: zram: Error: unavailable compression algorithm: lzz
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Reported-by: Marcin Jabrzyk <m.jabrzyk@samsung.com> --- drivers/block/zram/zcomp.c | 5 +++++ drivers/block/zram/zcomp.h | 1 + drivers/block/zram/zram_drv.c | 6 ++++++ 3 files changed, 12 insertions(+)
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c index a1a8b8e..e10e2b4 100644 --- a/drivers/block/zram/zcomp.c +++ b/drivers/block/zram/zcomp.c @@ -320,6 +320,11 @@ void zcomp_destroy(struct zcomp *comp) kfree(comp); } +bool zcomp_available_algorithm(const char *comp) +{ + return find_backend(comp) != NULL; +} + /* * search available compressors for requested algorithm. * allocate new zcomp and initialize it. return compressing diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h index c59d1fc..46e2b9f 100644 --- a/drivers/block/zram/zcomp.h +++ b/drivers/block/zram/zcomp.h @@ -51,6 +51,7 @@ struct zcomp { }; ssize_t zcomp_available_show(const char *comp, char *buf); +bool zcomp_available_algorithm(const char *comp); struct zcomp *zcomp_create(const char *comp, int max_strm); void zcomp_destroy(struct zcomp *comp); diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 28f6e46..e17b73e 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -378,6 +378,12 @@ static ssize_t comp_algorithm_store(struct device *dev, if (sz > 0 && zram->compressor[sz - 1] == '\n') zram->compressor[sz - 1] = 0x00; + if (!zcomp_available_algorithm(zram->compressor)) { + pr_err("Error: unavailable compression algorithm: %s\n", + zram->compressor); + len = -EINVAL; + } + up_write(&zram->init_lock); return len; } -- 2.4.1.314.g9532ead
| |