From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753677AbbAaRbP (ORCPT ); Sat, 31 Jan 2015 12:31:15 -0500 Received: from mout.gmx.net ([212.227.17.22]:62762 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752095AbbAaRbN (ORCPT ); Sat, 31 Jan 2015 12:31:13 -0500 Message-ID: <54CD115C.8070801@gmx.de> Date: Sat, 31 Jan 2015 18:31:08 +0100 From: Lino Sanfilippo User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: SF Markus Elfring , "David S. Miller" , Jamal Hadi Salim , netdev@vger.kernel.org CC: LKML , kernel-janitors@vger.kernel.org, Julia Lawall Subject: Re: [PATCH] net: sched: One function call less in em_meta_change() 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> <54CD042E.6030606@users.sourceforge.net> In-Reply-To: <54CD042E.6030606@users.sourceforge.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:FQU7OtSQepl1mDnQzd5R6o1idJpSjz00UiJLxI+/zQFXl2o65N7 rUlonfB8whnAWPyK7FFDKrY8xIBy+laacD0d56suuftAWc5bEvWNyePgX+P7ovpNJxwIKcc rFf2v5K0XziYk+NxcIpNpB75qReVQ+f905buKesTGxsKmM0Kbgxo8OnvVrQQTjDKlckywL6 j/CasJskvu0TLvOysTWIA== X-UI-Out-Filterresults: notjunk:1; Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 31.01.2015 17:34, SF Markus Elfring wrote: > From: Markus Elfring > Date: Sat, 31 Jan 2015 17:18:48 +0100 > > The meta_delete() function could be called in four cases by the > em_meta_change() function during error handling even if the passed > variable "meta" contained still a null pointer. > > * This implementation detail could be improved by adjustments for jump labels. > > * Let us return immediately after the first failed function call according to > the current Linux coding style convention. > > * Let us delete also unnecessary checks for the variables "err" and > "meta" there. > > Signed-off-by: Markus Elfring > --- > net/sched/em_meta.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c > index b5294ce..2aa67b1 100644 > --- a/net/sched/em_meta.c > +++ b/net/sched/em_meta.c > @@ -866,23 +866,23 @@ static int em_meta_change(struct net *net, void *data, int len, > > err = nla_parse(tb, TCA_EM_META_MAX, data, len, meta_policy); > if (err < 0) > - goto errout; > + return err; > > err = -EINVAL; > if (tb[TCA_EM_META_HDR] == NULL) > - goto errout; > + goto exit; > hdr = nla_data(tb[TCA_EM_META_HDR]); > > if (TCF_META_TYPE(hdr->left.kind) != TCF_META_TYPE(hdr->right.kind) || > TCF_META_TYPE(hdr->left.kind) > TCF_META_TYPE_MAX || > TCF_META_ID(hdr->left.kind) > TCF_META_ID_MAX || > TCF_META_ID(hdr->right.kind) > TCF_META_ID_MAX) > - goto errout; > + goto exit; > > meta = kzalloc(sizeof(*meta), GFP_KERNEL); > if (meta == NULL) { > err = -ENOMEM; > - goto errout; > + goto exit; > } > > memcpy(&meta->lvalue.hdr, &hdr->left, sizeof(hdr->left)); > @@ -891,20 +891,20 @@ static int em_meta_change(struct net *net, void *data, int len, > if (!meta_is_supported(&meta->lvalue) || > !meta_is_supported(&meta->rvalue)) { > err = -EOPNOTSUPP; > - goto errout; > + goto delete_meta; > } > > if (meta_change_data(&meta->lvalue, tb[TCA_EM_META_LVALUE]) < 0 || > meta_change_data(&meta->rvalue, tb[TCA_EM_META_RVALUE]) < 0) > - goto errout; > + goto delete_meta; > > m->datalen = sizeof(*meta); > m->data = (unsigned long) meta; > > - err = 0; > -errout: > - if (err && meta) > - meta_delete(meta); > + return 0; > +delete_meta: > + meta_delete(meta); > +exit: > return err; > } Why do you use that exit label if it does nothing more than returning the error value? Also if nla_parse fails you dont use it but return the error directly. While using a label which is used only to return an error may be a matter of taste, its at least inconsistent to do both in a function, use such a label in one case and return immediately in another, isnt it? Regards, Lino