[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <566B14DA.1080709@users.sourceforge.net>
Date: Fri, 11 Dec 2015 19:24:26 +0100
From: SF Markus Elfring <elfring@...rs.sourceforge.net>
To: LKML <linux-kernel@...r.kernel.org>,
Minchan Kim <minchan@...nel.org>,
Nitin Gupta <ngupta@...are.org>,
Sergey Senozhatsky <sergey.senozhatsky.work@...il.com>
Cc: kernel-janitors@...r.kernel.org,
Julia Lawall <julia.lawall@...6.fr>
Subject: [PATCH 1/2] zram: Less checks in zram_bvec_write() after error
detection
From: Markus Elfring <elfring@...rs.sourceforge.net>
Date: Fri, 11 Dec 2015 18:20:59 +0100
This issue was detected by using the Coccinelle software.
A few checks could be repeated by the zram_bvec_write() function
at two places even if the passed variables contained a null pointer.
* This implementation detail could be improved by adjustments
for jump targets according to the Linux coding style convention.
* Let us return directly if a memory allocation failed.
* Drop unnecessary initialisations for the variables "uncmem"
and "zstrm" then.
Signed-off-by: Markus Elfring <elfring@...rs.sourceforge.net>
---
drivers/block/zram/zram_drv.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 47915d7..69d7fcd 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -652,9 +652,9 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
size_t clen;
unsigned long handle;
struct page *page;
- unsigned char *user_mem, *cmem, *src, *uncmem = NULL;
+ unsigned char *user_mem, *cmem, *src, *uncmem;
struct zram_meta *meta = zram->meta;
- struct zcomp_strm *zstrm = NULL;
+ struct zcomp_strm *zstrm;
unsigned long alloced_pages;
page = bvec->bv_page;
@@ -664,13 +664,11 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
* before to write the changes.
*/
uncmem = kmalloc(PAGE_SIZE, GFP_NOIO);
- if (!uncmem) {
- ret = -ENOMEM;
- goto out;
- }
+ if (!uncmem)
+ return -ENOMEM;
ret = zram_decompress_page(zram, uncmem, index);
if (ret)
- goto out;
+ goto free_uncmem;
}
zstrm = zcomp_strm_find(zram->comp);
@@ -696,7 +694,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
atomic64_inc(&zram->stats.zero_pages);
ret = 0;
- goto out;
+ goto check_strm;
}
ret = zcomp_compress(zram->comp, zstrm, uncmem, &clen);
@@ -708,7 +706,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
if (unlikely(ret)) {
pr_err("Compression failed! err=%d\n", ret);
- goto out;
+ goto check_strm;
}
src = zstrm->buffer;
if (unlikely(clen > max_zpage_size)) {
@@ -722,7 +720,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
pr_err("Error allocating memory for compressed page: %u, size=%zu\n",
index, clen);
ret = -ENOMEM;
- goto out;
+ goto check_strm;
}
alloced_pages = zs_get_total_pages(meta->mem_pool);
@@ -731,7 +729,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
if (zram->limit_pages && alloced_pages > zram->limit_pages) {
zs_free(meta->mem_pool, handle);
ret = -ENOMEM;
- goto out;
+ goto check_strm;
}
cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_WO);
@@ -762,11 +760,13 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,
/* Update stats */
atomic64_add(clen, &zram->stats.compr_data_size);
atomic64_inc(&zram->stats.pages_stored);
-out:
+check_strm:
if (zstrm)
zcomp_strm_release(zram->comp, zstrm);
- if (is_partial_io(bvec))
+ if (is_partial_io(bvec)) {
+free_uncmem:
kfree(uncmem);
+ }
return ret;
}
--
2.6.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists