From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965142AbdKGPCs (ORCPT ); Tue, 7 Nov 2017 10:02:48 -0500 Received: from mout.web.de ([212.227.15.3]:59426 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934238AbdKGPCq (ORCPT ); Tue, 7 Nov 2017 10:02:46 -0500 To: netdev@vger.kernel.org, "David S. Miller" , Dmitry Tarnyagin , Sjur Braendeland From: SF Markus Elfring Subject: [PATCH RFC v1] caif: Use common error handling code in cfdgml_receive() Cc: LKML , kernel-janitors@vger.kernel.org Message-ID: <034c0760-b8af-0fe2-e7a0-81199ff31931@users.sourceforge.net> Date: Tue, 7 Nov 2017 16:02:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:3rvoyjbmBH9oAcilT6wvEMCIeSvqFviueuo5ZI6VYAfFg4F5as9 iOPyeTJU9RYo14MXkXwGAPpIuxnFpD4LoDbiXR0CIQt3ZiQyi4uWCRDzALkWRW+v/AKweYi BW5I9QUqweKlMKrmpJfaAbrW0qG3EMl0JGd2SE9OxKQPAu8NsNtvZzUYIKkOWGAFrDJqZ5a rKKrtkZIdc8wRKhFOTx+A== X-UI-Out-Filterresults: notjunk:1;V01:K0:Wq4n1alkmpI=:Lwuo+hLIyZRg8XqjzBcjxq m4Shm+Yav6/tpC5qxd1jtbtyxJ6LF15je6UvWbq397BpJ6WbBmrCXqGqsUYb3NEdvKw5bp+ys HRo+riE3QCv9RR7ra51G6CObteRfkOdAWOZvAxIbE0rGEE0XQ/tmcIc+mYD3CWEYmFWqfYGQB eWqLuOmHB8fHGqGWazcBluK5Et+VGSebwiXvFP380ypKk1SkkVPU1gWz4tG0LDGD4kZO+GSml HiXpQihOl7ggz+E0Ydd6k952g8j6Edf4CHyT2jnqfLS45n28ko7HjdFl9RulbtUbD9+rXed+v xDnEfBwA/851v0OE5hy5FXHTB1Ys8fbhMsXrkpKK/ArqneYJNPoN+RvyBiY1PJLcrHYhW92x4 UTwMKNUyzzle/POYf+5LI2ainU+ReWV5UlNsA3xB8FOSweoYqCTQ3yD46/oD9b08sH9qdzoz1 zDYHZtTGauapBqJbs45YNrUeEvcmKbT4CuHHzoTOGJ0Biep9Luf5SCQlTXFjipKBljxmX9/Up FSgFW6GksNoQdaNEZJ9za3sGwCOqVxjMj+CYf0Z7v3rU87GqCU52xbLjtA2jnC2dkRdYyij0c CGdLSCijCIK962CeWzUxo6vzmKaljj3St3HNHtLwitmVCU8Px0cR86KX1ViI1gAG80LV3b1vf njkkB8PhfCJyg8+MQq/525IGbDEbGLFnDl0fcBpL+Xt3K8m1yZVEuJqj1l4L8ifN+PjXMNbOQ 1uOZqUXU9IAWHMQ6fsBUYECQcXfXXLrfl8rTzz1tK3QkGg124wcTofC/FoYhUO4IOtFHwcjyP gGWZSfRWNBqgAyhicJG9RNl0EIeYUO3d1PUwLpNWwLn5UV4Uy0= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Tue, 7 Nov 2017 11:30:25 +0100 * Adjust jump targets so that a bit of exception handling can be better reused at the end of this function. * Adjust two condition checks. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- v1 - Request for comments: I can offer another bit of information for a software development discussion. ๐Ÿ’ญ The affected source file can be compiled for the processor architecture โ€œx86_64โ€ by a tool like โ€œGCC 6.4.1+r251631-1.3โ€ from the software distribution โ€œopenSUSE Tumbleweedโ€ with the following command example. my_cc=/usr/bin/gcc-6 \ && my_module=net/caif/cfdgml.o \ && for XYZ in 0 s 3; do echo " _____ $XYZ _____" \ && my_extra="-O$XYZ" \ && git checkout next-20171102 \ && make -j4 CC="${my_cc}" HOSTCC="${my_cc}" EXTRA_CFLAGS="${my_extra}" allmodconfig "${my_module}" \ && size "${my_module}" \ && git checkout ':/^caif: Use common error handling code in cfdgml_receive' \ && make -j4 CC="${my_cc}" HOSTCC="${my_cc}" EXTRA_CFLAGS="${my_extra}" allmodconfig "${my_module}" \ && size "${my_module}"; done ๐Ÿ”ฎ Do you find the following differences worth for further clarification? โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•— โ•‘ setting โ”‚ text โ•‘ โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ฃ โ•‘ O0 โ”‚ -59 โ•‘ โ•‘ Os โ”‚ +24 โ•‘ โ•‘ O3 โ”‚ +36 โ•‘ โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ• net/caif/cfdgml.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/net/caif/cfdgml.c b/net/caif/cfdgml.c index 3bdddb32d55a..cc7b2c944bb2 100644 --- a/net/caif/cfdgml.c +++ b/net/caif/cfdgml.c @@ -47,18 +47,13 @@ static int cfdgml_receive(struct cflayer *layr, struct cfpkt *pkt) caif_assert(layr->receive != NULL); caif_assert(layr->ctrlcmd != NULL); - if (cfpkt_extr_head(pkt, &cmd, 1) < 0) { - pr_err("Packet is erroneous!\n"); - cfpkt_destroy(pkt); - return -EPROTO; - } + if (cfpkt_extr_head(pkt, &cmd, 1)) + goto report_packet_failure; if ((cmd & DGM_CMD_BIT) == 0) { - if (cfpkt_extr_head(pkt, &dgmhdr, 3) < 0) { - pr_err("Packet is erroneous!\n"); - cfpkt_destroy(pkt); - return -EPROTO; - } + if (cfpkt_extr_head(pkt, &dgmhdr, 3)) + goto report_packet_failure; + ret = layr->up->receive(layr->up, pkt); return ret; } @@ -66,17 +61,23 @@ static int cfdgml_receive(struct cflayer *layr, struct cfpkt *pkt) switch (cmd) { case DGM_FLOW_OFF: /* FLOW OFF */ layr->ctrlcmd(layr, CAIF_CTRLCMD_FLOW_OFF_IND, 0); - cfpkt_destroy(pkt); - return 0; + ret = 0; + goto destroy_packet; case DGM_FLOW_ON: /* FLOW ON */ layr->ctrlcmd(layr, CAIF_CTRLCMD_FLOW_ON_IND, 0); - cfpkt_destroy(pkt); - return 0; + ret = 0; + goto destroy_packet; default: - cfpkt_destroy(pkt); pr_info("Unknown datagram control %d (0x%x)\n", cmd, cmd); - return -EPROTO; + goto e_proto; } +report_packet_failure: + pr_err("Packet is erroneous!\n"); +e_proto: + ret = -EPROTO; +destroy_packet: + cfpkt_destroy(pkt); + return ret; } static int cfdgml_transmit(struct cflayer *layr, struct cfpkt *pkt) -- 2.15.0