Messages in this thread Patch in this message | | | From | Sergey Senozhatsky <> | Subject | [RFC][PATCH 2/4] zram: extend zcomp_backend decompress callback | Date | Thu, 13 Aug 2015 22:55:21 +0900 |
| |
This is a preparation patch to make ZLIB compression backend support possible. ZLIB requires zstrm both for compress and decompress operations, which is not needed for LZO and LZ4 backends. Extend zcomp_decompress() and zcomp_backend decompress callback to optionally accept zstrm pointer. Pass NULL as a zstrm pointer to LZO and LZ4 backends.
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> --- drivers/block/zram/zcomp.c | 5 +++-- drivers/block/zram/zcomp.h | 5 +++-- drivers/block/zram/zcomp_lz4.c | 2 +- drivers/block/zram/zcomp_lzo.c | 2 +- drivers/block/zram/zram_drv.c | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c index 61e06b4..a1c67be 100644 --- a/drivers/block/zram/zcomp.c +++ b/drivers/block/zram/zcomp.c @@ -313,10 +313,11 @@ int zcomp_compress(struct zcomp *comp, struct zcomp_strm *zstrm, zstrm->private); } -int zcomp_decompress(struct zcomp *comp, const unsigned char *src, +int zcomp_decompress(struct zcomp *comp, struct zcomp_strm *zstrm, + const unsigned char *src, size_t src_len, unsigned char *dst) { - return comp->backend->decompress(src, src_len, dst); + return comp->backend->decompress(src, src_len, dst, NULL); } void zcomp_destroy(struct zcomp *comp) diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h index b8cf0b0..5cb9a0b 100644 --- a/drivers/block/zram/zcomp.h +++ b/drivers/block/zram/zcomp.h @@ -31,7 +31,7 @@ struct zcomp_backend { size_t *dst_len, void *private); int (*decompress)(const unsigned char *src, size_t src_len, - unsigned char *dst); + unsigned char *dst, void *private); int (*flags)(void); @@ -67,7 +67,8 @@ void zcomp_strm_release(struct zcomp *comp, struct zcomp_strm *zstrm); int zcomp_compress(struct zcomp *comp, struct zcomp_strm *zstrm, const unsigned char *src, size_t *dst_len); -int zcomp_decompress(struct zcomp *comp, const unsigned char *src, +int zcomp_decompress(struct zcomp *comp, struct zcomp_strm *zstrm, + const unsigned char *src, size_t src_len, unsigned char *dst); bool zcomp_set_max_streams(struct zcomp *comp, int num_strm); diff --git a/drivers/block/zram/zcomp_lz4.c b/drivers/block/zram/zcomp_lz4.c index 99ed995..09bf30c 100644 --- a/drivers/block/zram/zcomp_lz4.c +++ b/drivers/block/zram/zcomp_lz4.c @@ -36,7 +36,7 @@ static int zcomp_lz4_compress(const unsigned char *src, unsigned char *dst, } static int zcomp_lz4_decompress(const unsigned char *src, size_t src_len, - unsigned char *dst) + unsigned char *dst, void *private) { size_t dst_len = PAGE_SIZE; /* return : Success if return 0 */ diff --git a/drivers/block/zram/zcomp_lzo.c b/drivers/block/zram/zcomp_lzo.c index 7572d92..9cc2fa4 100644 --- a/drivers/block/zram/zcomp_lzo.c +++ b/drivers/block/zram/zcomp_lzo.c @@ -36,7 +36,7 @@ static int lzo_compress(const unsigned char *src, unsigned char *dst, } static int lzo_decompress(const unsigned char *src, size_t src_len, - unsigned char *dst) + unsigned char *dst, void *private) { size_t dst_len = PAGE_SIZE; int ret = lzo1x_decompress_safe(src, src_len, dst, &dst_len); diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 509023f..0aec4ce 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -582,7 +582,7 @@ static int zram_decompress_page(struct zram *zram, char *mem, u32 index) if (size == PAGE_SIZE) copy_page(mem, cmem); else - ret = zcomp_decompress(zram->comp, cmem, size, mem); + ret = zcomp_decompress(zram->comp, NULL, cmem, size, mem); zs_unmap_object(meta->mem_pool, handle); bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); -- 2.5.0
| |