public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Mark Zhang <markzhang@nvidia.com>
Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>,
	leon@kernel.org, linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Abaci Robot <abaci@linux.alibaba.com>
Subject: Re: [PATCH] RDMA/cm: fix cond_no_effect.cocci warnings
Date: Fri, 24 Jun 2022 17:17:33 -0300	[thread overview]
Message-ID: <20220624201733.GA284068@nvidia.com> (raw)
In-Reply-To: <e187af34-d0a8-55ed-cc21-d88845ec1eb5@nvidia.com>

On Tue, Jun 14, 2022 at 09:19:14AM +0800, Mark Zhang wrote:
> On 6/10/2022 5:45 PM, Jiapeng Chong wrote:
> > This was found by coccicheck:
> > 
> > ./drivers/infiniband/core/cm.c:685:7-9: WARNING: possible condition with no effect (if == else).
> > 
> > Reported-by: Abaci Robot <abaci@linux.alibaba.com>
> > Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
> > ---
> >   drivers/infiniband/core/cm.c | 9 ++-------
> >   1 file changed, 2 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
> > index 1c107d6d03b9..bb6a2b6b9657 100644
> > --- a/drivers/infiniband/core/cm.c
> > +++ b/drivers/infiniband/core/cm.c
> > @@ -676,14 +676,9 @@ static struct cm_id_private *cm_find_listen(struct ib_device *device,
> >   			refcount_inc(&cm_id_priv->refcount);
> >   			return cm_id_priv;
> >   		}
> > -		if (device < cm_id_priv->id.device)
> > +		if (device < cm_id_priv->id.device ||
> > +		    be64_lt(service_id, cm_id_priv->id.service_id))
> >   			node = node->rb_left;
> > -		else if (device > cm_id_priv->id.device)
> > -			node = node->rb_right;
> > -		else if (be64_lt(service_id, cm_id_priv->id.service_id))
> > -			node = node->rb_left;
> > -		else if (be64_gt(service_id, cm_id_priv->id.service_id))
> > -			node = node->rb_right;
> >   		else
> >   			node = node->rb_right;
> >   	}
> 
> Not sure if the fix is correct, e.g. with this condition:
>   device > cm_id_priv->id.device &&
>   be64_lt(service_id, cm_id_priv->id.service_id)
> 
> The original code gets rb_right but this fix gets rb_left. Maybe the warning
> is complain about this:
> 	...
> 	else if (be64_gt(service_id, cm_id_priv->id.service_id))
> 		node = node->rb_right;
> 	else
> 		node = node->rb_right;
> 
> Besides cm_insert_listen() has same logic.

Yes, this is a standard pattern for walking tree with priority, we
should not obfuscate it.

The final else means 'equal' and the first if should ideally be placed
there

However this function is complicated by the use of the service_mask
for equality checking, and it doesn't even work right if the
service_mask is not -1.

If someone wants to clean this then please go through and eliminate
service_mask completely. From what I can see its value is always -1.
Three patches:
 - Remove the service_mask parameter from ib_cm_listen(), all callers
   use 0
 - Remove the service_mask parameter from cm_init_listen(), all
   callers use 0. Inspect and remove cm_id_priv->id.service_mask,
   it is the constant value  ~cpu_to_be64(0) which is a NOP when &'d
 - Move the test at the top of cm_find_listen() into the final else

Jason

  reply	other threads:[~2022-06-24 20:17 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-10  9:45 [PATCH] RDMA/cm: fix cond_no_effect.cocci warnings Jiapeng Chong
2022-06-14  1:19 ` Mark Zhang
2022-06-24 20:17   ` Jason Gunthorpe [this message]
2022-08-02  2:15     ` Mark Zhang
2022-08-02 13:52       ` Jason Gunthorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220624201733.GA284068@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=abaci@linux.alibaba.com \
    --cc=jiapeng.chong@linux.alibaba.com \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=markzhang@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox