From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1032551AbbKEMUt (ORCPT ); Thu, 5 Nov 2015 07:20:49 -0500 Received: from mout.web.de ([212.227.15.14]:58244 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030515AbbKEMUr (ORCPT ); Thu, 5 Nov 2015 07:20:47 -0500 Subject: [PATCH 3/3] staging: lustre: Less function calls in class_register_type() after error detection To: Andreas Dilger , Greg Kroah-Hartman , Oleg Drokin , lustre-devel@lists.lustre.org, devel@driverdev.osuosl.org 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> <563B473C.5090508@users.sourceforge.net> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring Message-ID: <563B4991.90005@users.sourceforge.net> Date: Thu, 5 Nov 2015 13:20:33 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <563B473C.5090508@users.sourceforge.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:oAtkNjfRH4NSF1+DwsydNl4mVaSjAIySgsIYjtZhMleQ49aqsNF WfE2d3YDlzRoTXcj/sZVegmyiELRCRoDMSmqk7zRn+DPZpYkLiO8G8OGEp4Lxls9MnYtUEl DAudfymojH4VIthVJC6uGAqtNyYYb/OevG38KGzDWJ2crrAnVk96RKABPA6v2+piiqh6tTj qjFDnfJ5U6J4IIz2g18GA== X-UI-Out-Filterresults: notjunk:1;V01:K0:lKA43oc9A5c=:POURjgUsSGVw7IX1dgvrzm WFD3qHrn+/30vGoFYMIMhMPf0k4bvdLOgDvD33dQcJLT4ghaB/bexsq6tzQFP0CQrXxNSKeoT yYQuKGxNgh71IiXQHHeY7fGgMq8K+zLQ5vGEp1QV1ueclyGESe+7+x1xj8URSoPDG4ZKbz8o5 Pt9yCQDDXGLYL8U8GpVEuPz/oDXc328FieBSxASVA3eWyxWgDz93UqBegFb8Hlfhtc8k9ncJ4 SKN/vKka8MdWFYnpyLT5QLgCkC9pr9tkd/ykSNBOaWaFzp088+okQMzUTmzMW8odI8o2iO0WL V+XsOlFuiN4AOvzzlje4iXR+C1/RaIloiSQDmgfClRzP0agmPlnsvhCkDf12IOFMonn7TWAxI j64F8j+pfThXIgKGFiZ1QXmSmgg+adYNzKyRwipBueLCKw60VZXE9Lfm7PxTK7ctey41xP4h7 RKm52zWTQtyxV7eh/JDYS9rvpyNQ1LRqnRMzjOJVAYH+/DQgZ7bHWzIWGWDpofcjQ56VvgYif 6lUYu+LMAHVB/FKHvA1mtUtn1uQkWNNLVPbP6kLNvIVKl+54pQ3UKa8AHrDe1kK4fXNsNp+9r 48tJ3P1/GENSiTgRjFXOrV87dILjhWWasbf5QsnqI1Xqg/gX+OWGRd4RRnAa6PBGViaHEUU/Q v4d1np6Omb1kAqn9uhXr83RIGRzD89ZZBqVA0IFah4PPp6nG9tbtrjT+sD+LOwqwLa7Hwgfp8 64Z+fuLK9zbev9NUM3v/jlx/x0P1aX+b2oISYGGNSy90trhimAEEbTwhayG40ZEirT+ctNcze YkN+Twr Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Thu, 5 Nov 2015 12:48:58 +0100 The functions "kfree" and "kobject_put" were called in a few cases by the function "class_register_type" during error handling even if the passed variable contained a null pointer. This implementation detail could be improved by the adjustment of jump targets. Signed-off-by: Markus Elfring --- drivers/staging/lustre/lustre/obdclass/genops.c | 26 +++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index acb86f0..4d99a39 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -171,13 +171,16 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops, return rc; type->typ_dt_ops = kzalloc(sizeof(*type->typ_dt_ops), GFP_NOFS); + if (!type->typ_dt_ops) + goto free_type; + type->typ_md_ops = kzalloc(sizeof(*type->typ_md_ops), GFP_NOFS); - type->typ_name = kzalloc(strlen(name) + 1, GFP_NOFS); + if (!type->typ_md_ops) + goto free_dt_ops; - if (!type->typ_dt_ops || - !type->typ_md_ops || - !type->typ_name) - goto failed; + type->typ_name = kzalloc(strlen(name) + 1, GFP_NOFS); + if (!type->typ_name) + goto free_md_ops; *(type->typ_dt_ops) = *dt_ops; /* md_ops is optional */ @@ -193,20 +196,20 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops, rc = type->typ_debugfs_entry ? PTR_ERR(type->typ_debugfs_entry) : -ENOMEM; type->typ_debugfs_entry = NULL; - goto failed; + goto free_name; } type->typ_kobj = kobject_create_and_add(type->typ_name, lustre_kobj); if (!type->typ_kobj) { rc = -ENOMEM; - goto failed; + goto free_name; } if (ldt != NULL) { type->typ_lu = ldt; rc = lu_device_type_init(ldt); if (rc != 0) - goto failed; + goto put_object; } spin_lock(&obd_types_lock); @@ -214,12 +217,15 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops, spin_unlock(&obd_types_lock); return 0; - - failed: +put_object: kobject_put(type->typ_kobj); +free_name: kfree(type->typ_name); +free_md_ops: kfree(type->typ_md_ops); +free_dt_ops: kfree(type->typ_dt_ops); +free_type: kfree(type); return rc; } -- 2.6.2