Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752631AbbLNG6v (ORCPT ); Mon, 14 Dec 2015 01:58:51 -0500 Received: from mout.web.de ([212.227.17.12]:53700 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752414AbbLNG6u (ORCPT ); Mon, 14 Dec 2015 01:58:50 -0500 Subject: Re: [PATCH 1/2] zram: Less checks in zram_bvec_write() after error detection To: Sergey Senozhatsky References: <566ABCD9.1060404@users.sourceforge.net> <566B13C1.50907@users.sourceforge.net> <566B14DA.1080709@users.sourceforge.net> <20151214002702.GA718@swordfish> Cc: LKML , Minchan Kim , Nitin Gupta , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring X-Enigmail-Draft-Status: N1110 Message-ID: <566E6895.5050603@users.sourceforge.net> Date: Mon, 14 Dec 2015 07:58:29 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <20151214002702.GA718@swordfish> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:JWacR+AQX2zWs9gqmoCInFhdsRuw1fpVUlz3WnY1VH+LZj4Uelx AJkgh7+aCvu3V5g2MRMTSTo30/km7oyJMSFFKQUlA43Gp0HLECoHhPwMNcVjctWQWhUJzc0 /BqwEk/k/H063EpWb03hvERSViPrmPaJLP8yG9I9bQN5y36jxLMTNpc+eH1sMg6o2hLNO/x jHpX9nziX5Op6Su5Ly1GQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:ZOHCw8f9hC8=:6EVVzvc1bKA1O/5joQAFwn CCAXUNDyJcMuKrwsNTrfAeBq1jz7ArnHCnz1kc5eowmJAfQdNIdkfhK0L+e43GLq+5IlHBUMl AB8cNVQfQP384qUxrEmKH7YQ5pvyagm+nKerASjcddpI8hSETiG2Oc78IyMP9A1vrX/77BR1N lgw9eHllnLBfdhkoyPKVViHomUTZjfuIQiB3H9gdnulrnf8cWFgbgUtAd2nAR4yH4UawAHuS7 SLfaYDPdQrXs6J0RoacfMoIJHfI10wR1wMKfqCcR+DpOs94muNJVbDA2lBWumRQEpDZVKVOnQ CGdlAxlU152gcuthSoo8kC6usq3IxH66cAF1R/MADZEiihZkYHvGz+PT2LvA4sepL9hGHsCBD 2FAnX1GDXuwSs55l4jOw+kCIkkSWgvzHGHrIKruE6LZSZnSEELDeiw4ZW8AYjgvpkeP+uDm0G eR+YFIgbdkhTo1cnpyvoIo9wd/jA3b/StUO1j9qNG7lqwtH5QM4zGIt+ZRSoIAP2wFjFnjBDl /5DNnDPcXvIQm7qLfZkYBBW1//dyLv8DLP28WvJEOtOR/cjcnvwOGHpSno1YqAeDXaE0pYQia VeQuGVKNfMMXzXIWJkQf+lxrU0y5TVlox+4J90Sq9SbcGSPetKPY54VNl9Evrql8Q73+aydrP e6rgWdXMVbp0aaUHQA9XWhzcW4jqK+x/2zuMQi36uogr7mhoB0qngZ2lSpZkegBUH6d3sTkhd a8AD2Tkq4ggUhUGGbIFDtytpL2+H4YBMcke0/O6ZZ7ac1tEA8AmTL5f5TBKwxqT5eD1XVEI7h zcHbWz9 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2519 Lines: 83 >> 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; > > ok. Thanks for your terse acknowledgement. >> ret = zram_decompress_page(zram, uncmem, index); >> if (ret) >> - goto out; >> + goto free_uncmem; > > here and later, I don't want to split `out' label. I guess that corresponding software design concerns can evolve a bit. > you still need to do both 'if zstrm' and 'if is_partial_io' checks anyway, what's the gain? How are the chances to reduce the number of dispensable sanity checks? > the more labels we have the trickier it may get. I hope that more unique jump labels can make the involved exception handling also clearer. >> @@ -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); >> + } > > a label inside of `if'? no. Do any more software developers find such an use case interesting? > keep it the way it is please. I suggest to make the affected exception handling a bit more efficient. Such source code fine-tuning has got a few special consequences. Regards, Markus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/