From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755677AbbBFRZg (ORCPT ); Fri, 6 Feb 2015 12:25:36 -0500 Received: from mout.web.de ([212.227.17.11]:60702 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752759AbbBFRZf (ORCPT ); Fri, 6 Feb 2015 12:25:35 -0500 Message-ID: <54D4F907.3040205@users.sourceforge.net> Date: Fri, 06 Feb 2015 18:25:27 +0100 From: SF Markus Elfring User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: "James E. J. Bottomley" , linux-scsi@vger.kernel.org CC: LKML , kernel-janitors@vger.kernel.org, Julia Lawall Subject: [PATCH 2/3] SCSI-debug: Less function calls in scsi_debug_init() after error detection References: <5307CAA2.8060406@users.sourceforge.net> <530A086E.8010901@users.sourceforge.net> <530A72AA.3000601@users.sourceforge.net> <530B5FB6.6010207@users.sourceforge.net> <530C5E18.1020800@users.sourceforge.net> <530CD2C4.4050903@users.sourceforge.net> <530CF8FF.8080600@users.sourceforge.net> <530DD06F.4090703@users.sourceforge.net> <5317A59D.4@users.sourceforge.net> <54D4F7DF.8070008@users.sourceforge.net> In-Reply-To: <54D4F7DF.8070008@users.sourceforge.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:KyVmrisvywSpvponKUeZr9J59s8AeROnEjRyDcbrtjCa6gMcXX4 l8sPn8NyfBCb3h9RwMqqI0+4ELGjjAWT4HmUQox7Hb2nZSRUMIfh7AVUp2b8QdAPYIjOwyz CE97hrEOVQZ22szxqdinrdoBQCP7SAgFHAGoeoduBcJdh+VazzD6DRZYQAZqgfvJt5o3heu BuLBg6JsrOgXEyok2eBKQ== X-UI-Out-Filterresults: notjunk:1; Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Fri, 6 Feb 2015 17:48:34 +0100 The vfree() function was called in two cases by the scsi_debug_init() function during error handling even if the passed variables "dif_storep" and "map_storep" contained null pointers eventually. This implementation detail could be improved by the introduction of two jump labels. Signed-off-by: Markus Elfring --- drivers/scsi/scsi_debug.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 9e4add7..756b7be 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -4887,7 +4887,7 @@ static int __init scsi_debug_init(void) if (dif_storep == NULL) { pr_err("%s: out of mem. (DIX)\n", __func__); ret = -ENOMEM; - goto free_vm; + goto free_fake; } memset(dif_storep, 0xff, dif_size); @@ -4920,7 +4920,7 @@ static int __init scsi_debug_init(void) if (map_storep == NULL) { pr_err("%s: out of mem. (MAP)\n", __func__); ret = -ENOMEM; - goto free_vm; + goto free_dif; } bitmap_zero(map_storep, map_size); @@ -4934,7 +4934,7 @@ static int __init scsi_debug_init(void) if (IS_ERR(pseudo_primary)) { pr_warn("%s: root_device_register() error\n", __func__); ret = PTR_ERR(pseudo_primary); - goto free_vm; + goto free_map; } ret = bus_register(&pseudo_lld_bus); if (ret < 0) { @@ -4968,9 +4968,11 @@ bus_unreg: bus_unregister(&pseudo_lld_bus); dev_unreg: root_device_unregister(pseudo_primary); -free_vm: +free_map: vfree(map_storep); +free_dif: vfree(dif_storep); +free_fake: vfree(fake_storep); return ret; } -- 2.2.2