UPSTREAM: zram: inline zram_compress
authorMinchan Kim <minchan@kernel.org>
Wed, 6 Sep 2017 23:19:47 +0000 (16:19 -0700)
committerivanmeler <i_ivan@windowslive.com>
Wed, 13 Apr 2022 21:13:24 +0000 (21:13 +0000)
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>
(cherry picked from commit 97ec7c8bd5d029b2c3e40355c1204197094e9ba1)
Signed-off-by: Peter Kalauskas <peskal@google.com>
Bug: 112488418
Change-Id: Ibb37d77168edd0b01d0b9820e431c73cc3c2ff20

drivers/block/zram/zram_drv.c

index 2c3046b1f9b7cb63618febf8372d8b9c479cdde0..96c175bb476f2dfc6c95f12cb992d6fdcff7c6a4 100644 (file)
@@ -588,25 +588,38 @@ out:
        return ret;
 }
 
-static int zram_compress(struct zram *zram, struct zcomp_strm **zstrm,
-                       struct page *page,
-                       unsigned long *out_handle, unsigned int *out_comp_len)
+static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index)
 {
        int ret;
-       unsigned int comp_len;
-       void *src;
        unsigned long alloced_pages;
        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:
+       zstrm = zcomp_stream_get(zram->comp);
        src = kmap_atomic(page);
-       ret = zcomp_compress(*zstrm, src, &comp_len);
+       ret = zcomp_compress(zstrm, src, &comp_len);
        kunmap_atomic(src);
 
        if (unlikely(ret)) {
+               zcomp_stream_put(zram->comp);
                pr_err("Compression failed! err=%d\n", ret);
-               if (handle)
-                       zs_free(zram->mem_pool, handle);
+               zs_free(zram->mem_pool, handle);
                return ret;
        }
 
@@ -638,7 +651,6 @@ compress_again:
                handle = zs_malloc(zram->mem_pool, comp_len,
                                GFP_NOIO | __GFP_HIGHMEM |
                                __GFP_MOVABLE);
-               *zstrm = zcomp_stream_get(zram->comp);
                if (handle)
                        goto compress_again;
                return -ENOMEM;
@@ -648,43 +660,11 @@ compress_again:
        update_used_max(zram, alloced_pages);
 
        if (zram->limit_pages && alloced_pages > zram->limit_pages) {
+               zcomp_stream_put(zram->comp);
                zs_free(zram->mem_pool, handle);
                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);
 
        src = zstrm->buffer;