2021-08-03 00:30:12

by Salah Triki

[permalink] [raw]
Subject: [PATCH] usb: class: usblp: replace conditional statement with min()

Replace conditional statement with min() in order to make code cleaner. Issue
found by coccinelle.

Signed-off-by: Salah Triki <[email protected]>
---
drivers/usb/class/usblp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index f27b4aecff3d..fd779a989526 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -264,7 +264,7 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i
dev_dbg(&usblp->intf->dev,
"usblp_control_msg: rq: 0x%02x dir: %d recip: %d value: %d idx: %d len: %#x result: %d\n",
request, !!dir, recip, value, index, len, retval);
- return retval < 0 ? retval : 0;
+ return min(retval, 0);
}

#define usblp_read_status(usblp, status)\
--
2.25.1



2021-08-03 01:52:39

by Pete Zaitcev

[permalink] [raw]
Subject: Re: [PATCH] usb: class: usblp: replace conditional statement with min()

On Tue, 3 Aug 2021 01:28:06 +0100
Salah Triki <[email protected]> wrote:

> Replace conditional statement with min() in order to make code cleaner. Issue
> found by coccinelle.

> +++ b/drivers/usb/class/usblp.c
> request, !!dir, recip, value, index, len, retval);
> - return retval < 0 ? retval : 0;
> + return min(retval, 0);
> }

I'm very much against this change. The function min() is there
for numeric values. But here we have a situation where we
do one thing if there was an error, and another thing if
there was no error.

This sort of abuse is exactly why blindly clicking heels
whenever a tool tells you is not optimal.

If the objective is to shut the tool up, please consider
the following instead:

diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index 9596e4279294..bbcbcf199fa9 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -264,7 +264,9 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i
dev_dbg(&usblp->intf->dev,
"usblp_control_msg: rq: 0x%02x dir: %d recip: %d value: %d idx: %d len: %#x result: %d\n",
request, !!dir, recip, value, index, len, retval);
- return retval < 0 ? retval : 0;
+ if (retval < 0)
+ return retval;
+ return 0;
}

#define usblp_read_status(usblp, status)\


-- Pete


2021-08-03 05:16:22

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] usb: class: usblp: replace conditional statement with min()

On Mon, Aug 02, 2021 at 08:50:22PM -0500, Pete Zaitcev wrote:
> On Tue, 3 Aug 2021 01:28:06 +0100
> Salah Triki <[email protected]> wrote:
>
> > Replace conditional statement with min() in order to make code cleaner. Issue
> > found by coccinelle.
>
> > +++ b/drivers/usb/class/usblp.c
> > request, !!dir, recip, value, index, len, retval);
> > - return retval < 0 ? retval : 0;
> > + return min(retval, 0);
> > }
>
> I'm very much against this change. The function min() is there
> for numeric values. But here we have a situation where we
> do one thing if there was an error, and another thing if
> there was no error.
>
> This sort of abuse is exactly why blindly clicking heels
> whenever a tool tells you is not optimal.
>
> If the objective is to shut the tool up, please consider
> the following instead:
>
> diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
> index 9596e4279294..bbcbcf199fa9 100644
> --- a/drivers/usb/class/usblp.c
> +++ b/drivers/usb/class/usblp.c
> @@ -264,7 +264,9 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i
> dev_dbg(&usblp->intf->dev,
> "usblp_control_msg: rq: 0x%02x dir: %d recip: %d value: %d idx: %d len: %#x result: %d\n",
> request, !!dir, recip, value, index, len, retval);
> - return retval < 0 ? retval : 0;
> + if (retval < 0)
> + return retval;
> + return 0;
> }

I agree with Pete here, this is the "correct" fix for this, using min()
is not ok here.

thanks,

greg k-h