zram: inline zram_compress
zram_compress does several things, compress, entry alloc and check limitation. I did for just readbility but it hurts modulization.:( So this patch removes zram_compress functions and inline it in __zram_bvec_write for upcoming patches. Link: http://lkml.kernel.org/r/1498459987-24562-3-git-send-email-minchan@kernel.org Signed-off-by: Minchan Kim <minchan@kernel.org> Cc: Juneho Choi <juno.choi@lge.com> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4ebbe7f7fc
commit
97ec7c8bd5
|
@ -589,25 +589,38 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int zram_compress(struct zram *zram, struct zcomp_strm **zstrm,
|
static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
|
||||||
struct page *page,
|
|
||||||
unsigned long *out_handle, unsigned int *out_comp_len)
|
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int comp_len;
|
|
||||||
void *src;
|
|
||||||
unsigned long alloced_pages;
|
unsigned long alloced_pages;
|
||||||
unsigned long handle = 0;
|
unsigned long handle = 0;
|
||||||
|
unsigned int comp_len = 0;
|
||||||
|
void *src, *dst, *mem;
|
||||||
|
struct zcomp_strm *zstrm;
|
||||||
|
struct page *page = bvec->bv_page;
|
||||||
|
unsigned long element = 0;
|
||||||
|
enum zram_pageflags flags = 0;
|
||||||
|
|
||||||
|
mem = kmap_atomic(page);
|
||||||
|
if (page_same_filled(mem, &element)) {
|
||||||
|
kunmap_atomic(mem);
|
||||||
|
/* Free memory associated with this sector now. */
|
||||||
|
flags = ZRAM_SAME;
|
||||||
|
atomic64_inc(&zram->stats.same_pages);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
kunmap_atomic(mem);
|
||||||
|
|
||||||
compress_again:
|
compress_again:
|
||||||
|
zstrm = zcomp_stream_get(zram->comp);
|
||||||
src = kmap_atomic(page);
|
src = kmap_atomic(page);
|
||||||
ret = zcomp_compress(*zstrm, src, &comp_len);
|
ret = zcomp_compress(zstrm, src, &comp_len);
|
||||||
kunmap_atomic(src);
|
kunmap_atomic(src);
|
||||||
|
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
|
zcomp_stream_put(zram->comp);
|
||||||
pr_err("Compression failed! err=%d\n", ret);
|
pr_err("Compression failed! err=%d\n", ret);
|
||||||
if (handle)
|
zs_free(zram->mem_pool, handle);
|
||||||
zs_free(zram->mem_pool, handle);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,7 +652,6 @@ compress_again:
|
||||||
handle = zs_malloc(zram->mem_pool, comp_len,
|
handle = zs_malloc(zram->mem_pool, comp_len,
|
||||||
GFP_NOIO | __GFP_HIGHMEM |
|
GFP_NOIO | __GFP_HIGHMEM |
|
||||||
__GFP_MOVABLE);
|
__GFP_MOVABLE);
|
||||||
*zstrm = zcomp_stream_get(zram->comp);
|
|
||||||
if (handle)
|
if (handle)
|
||||||
goto compress_again;
|
goto compress_again;
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -649,43 +661,11 @@ compress_again:
|
||||||
update_used_max(zram, alloced_pages);
|
update_used_max(zram, alloced_pages);
|
||||||
|
|
||||||
if (zram->limit_pages && alloced_pages > zram->limit_pages) {
|
if (zram->limit_pages && alloced_pages > zram->limit_pages) {
|
||||||
|
zcomp_stream_put(zram->comp);
|
||||||
zs_free(zram->mem_pool, handle);
|
zs_free(zram->mem_pool, handle);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
*out_handle = handle;
|
|
||||||
*out_comp_len = comp_len;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
unsigned long handle = 0;
|
|
||||||
unsigned int comp_len = 0;
|
|
||||||
void *src, *dst, *mem;
|
|
||||||
struct zcomp_strm *zstrm;
|
|
||||||
struct page *page = bvec->bv_page;
|
|
||||||
unsigned long element = 0;
|
|
||||||
enum zram_pageflags flags = 0;
|
|
||||||
|
|
||||||
mem = kmap_atomic(page);
|
|
||||||
if (page_same_filled(mem, &element)) {
|
|
||||||
kunmap_atomic(mem);
|
|
||||||
/* Free memory associated with this sector now */
|
|
||||||
atomic64_inc(&zram->stats.same_pages);
|
|
||||||
flags = ZRAM_SAME;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
kunmap_atomic(mem);
|
|
||||||
|
|
||||||
zstrm = zcomp_stream_get(zram->comp);
|
|
||||||
ret = zram_compress(zram, &zstrm, page, &handle, &comp_len);
|
|
||||||
if (ret) {
|
|
||||||
zcomp_stream_put(zram->comp);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
dst = zs_map_object(zram->mem_pool, handle, ZS_MM_WO);
|
dst = zs_map_object(zram->mem_pool, handle, ZS_MM_WO);
|
||||||
|
|
||||||
src = zstrm->buffer;
|
src = zstrm->buffer;
|
||||||
|
|
Loading…
Reference in New Issue