From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934381AbdKBTke (ORCPT ); Thu, 2 Nov 2017 15:40:34 -0400 Received: from mout.web.de ([212.227.15.14]:52340 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934065AbdKBTka (ORCPT ); Thu, 2 Nov 2017 15:40:30 -0400 To: devel@driverdev.osuosl.org, Greg Kroah-Hartman , H Hartley Sweeten , Ian Abbott Cc: LKML , kernel-janitors@vger.kernel.org From: SF Markus Elfring Subject: [PATCH] staging: comedi: usbduxfast: Improve unlocking of a mutex in usbduxfast_ai_insn_read() Message-ID: Date: Thu, 2 Nov 2017 20:40:12 +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: 7bit X-Provags-ID: V03:K0:JvRmEqqgHR+Fd579ieIfkg3bPNEavV3rpBc92eRfihujdZfU21H JeyGUXPhyHV+KVREiLWgOTGx7XFVqerISZ0xVoI4kAcgix9FSXJbWBtUO/IE65Z4JBowL5O pVQaPu+/X7IAdgNvdj9Q8bfif+JsGyZ29piSpS3I1MjVsF1BGo0AXGnyG5DEXhmzdwhLmTY MvYZg0UJnv0bUMctqFtTQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:77o+Wo1UAEo=:O+OhYGp/OO8HpOYXZJGUcx uayEBbDc8GBYapmw6tiyGGpK02s7WNbIWSTPH1DTWVPmBA+q9FAMMSfiHRwwbmUcJcpi22Dkk R/iUST1p/FUzMxrFmWMw0tg7k+J4UgoRwLnBO1feyW39ydIsOLYglPkr/GEJWyrupp7RTfPnW BW9e8P1ZvDE7Qt2XTr0qtJgOnNBmZb3UPBP37YnGqlNy1/G+xwTolbTuzW2UJheGgcuten4lI jcL+afN0QXtPK79rAbHQ6hSC/ThItxuYLpJptmnJC7eX+LhN4tdffFmtqnmsWiCOOAfArVAQY OpWw0OnGLl45dVw6qjfBRyclVGo1hlFcU+u3nd9QLZuEvVLHyORwz2q4nAKIsA83wK/00Go2J lQfh8mUxGgmgmD4536g4WtPwI9th0lvQrpLynoj7tD2JwGj3USKlC28de4dLPN1XENrn0d4Dh yBIKkFQ5JwDDU69qHjm1zQ1vxNCQ0C4O8yYRWmQfZprL3sw4keCHFjZtGdAx7bBp5a26lVMm4 woLSjMZA7U5yEQKsvGXwSVVCOYAzeuBKlc+JqIPBmMLAexIt0pkw76DjPGdXyZPC8larEeuO+ jO41izMtoCcG6VoM914T7GEkESY8xad+6YIcK7gItDV8MH07IpVzLlk4QXCfWdlZbAIwHhDBT pgMpfoPi2JPOojLGFEHhe/GSt7Rgr0X4SKFt5SWW5jzUs7q2w+rds68uRPn8QMQ8T+rMiOqB/ KvrA6iT3aV3SDDKgBltUEonkec7wa9pTAwRVk5OmfxiczrE6ODkSZn/Xz6pR2tnoXOfn2GOEY ifslQfclXc83O1N24DJMrLlatnC+bFSjAbuUrwqb/TYcAyCKqU= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Thu, 2 Nov 2017 20:30:31 +0100 * Add a jump target so that a call of the function "mutex_unlock" is stored only twice in this function implementation. * Replace five calls by goto statements. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- drivers/staging/comedi/drivers/usbduxfast.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 608403c7586b..e5884faf7275 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c @@ -777,8 +777,8 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, if (devpriv->ai_cmd_running) { dev_err(dev->class_dev, "ai_insn_read not possible, async cmd is running\n"); - mutex_unlock(&devpriv->mut); - return -EBUSY; + ret = -EBUSY; + goto unlock; } /* set command for the first channel */ @@ -798,10 +798,8 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, usbduxfast_cmd_data(dev, 6, 0x01, 0x00, rngmask, 0x00); ret = usbduxfast_send_cmd(dev, SENDADCOMMANDS); - if (ret < 0) { - mutex_unlock(&devpriv->mut); - return ret; - } + if (ret < 0) + goto unlock; for (i = 0; i < PACKETS_TO_IGNORE; i++) { ret = usb_bulk_msg(usb, usb_rcvbulkpipe(usb, BULKINEP), @@ -809,8 +807,7 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, &actual_length, 10000); if (ret < 0) { dev_err(dev->class_dev, "insn timeout, no data\n"); - mutex_unlock(&devpriv->mut); - return ret; + goto unlock; } } @@ -820,14 +817,13 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, &actual_length, 10000); if (ret < 0) { dev_err(dev->class_dev, "insn data error: %d\n", ret); - mutex_unlock(&devpriv->mut); - return ret; + goto unlock; } n = actual_length / sizeof(u16); if ((n % 16) != 0) { dev_err(dev->class_dev, "insn data packet corrupted\n"); - mutex_unlock(&devpriv->mut); - return -EINVAL; + ret = -EINVAL; + goto unlock; } for (j = chan; (j < n) && (i < insn->n); j = j + 16) { data[i] = ((u16 *)(devpriv->inbuf))[j]; @@ -838,6 +834,10 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, mutex_unlock(&devpriv->mut); return insn->n; + +unlock: + mutex_unlock(&devpriv->mut); + return ret; } static int usbduxfast_upload_firmware(struct comedi_device *dev, -- 2.15.0