RE: [PATCH rdma-next 1/3] RDMA/cma: Skip netdev and port checks while searching for listener

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Doug, Jason,

> -----Original Message-----
> From: Leon Romanovsky <leon@xxxxxxxxxx>
> Sent: Wednesday, September 12, 2018 1:32 AM
> To: Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe
> <jgg@xxxxxxxxxxxx>
> Cc: Leon Romanovsky <leonro@xxxxxxxxxxxx>; RDMA mailing list <linux-
> rdma@xxxxxxxxxxxxxxx>; Daniel Jurgens <danielj@xxxxxxxxxxxx>; Parav
> Pandit <parav@xxxxxxxxxxxx>
> Subject: [PATCH rdma-next 1/3] RDMA/cma: Skip netdev and port checks
> while searching for listener
> 

Please drop this patch. I happen to send older version of the patch.
Will send out v1.


> From: Parav Pandit <parav@xxxxxxxxxxxx>
> 
> When a multi port HCA is used along with IP address failover configuration,
> listener bound to a rdma device, should be able to accept the connect
> requests from any of the incoming port as long as listener is searched in
> right net namespace of the incoming netdevice.
> 
> Therefore, while searching for listener in a given net namespace in
> cma_find_listener(), skip netdev and port checks.
> 
> This allows to accept the request from any of the ports of multi port (and
> with single port) IB/RoCE HCA as long as their IP addresses match.
> 
> Signed-off-by: Parav Pandit <parav@xxxxxxxxxxxx>
> Reviewed-by: Daniel Jurgens <danielj@xxxxxxxxxxxx>
> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
> ---
>  drivers/infiniband/core/cma.c | 29 ++---------------------------
>  1 file changed, 2 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
> index e941deb1770d..20add836fc13 100644
> --- a/drivers/infiniband/core/cma.c
> +++ b/drivers/infiniband/core/cma.c
> @@ -1462,29 +1462,6 @@ static bool cma_protocol_roce(const struct
> rdma_cm_id *id)
>  	return rdma_protocol_roce(device, port_num);  }
> 
> -static bool cma_match_net_dev(const struct rdma_cm_id *id,
> -			      const struct net_device *net_dev,
> -			      u8 port_num)
> -{
> -	const struct rdma_addr *addr = &id->route.addr;
> -
> -	if (!net_dev)
> -		/* This request is an AF_IB request */
> -		return (!id->port_num || id->port_num == port_num) &&
> -		       (addr->src_addr.ss_family == AF_IB);
> -
> -	/*
> -	 * Net namespaces must match, and if the listner is listening
> -	 * on a specific netdevice than netdevice must match as well.
> -	 */
> -	if (net_eq(dev_net(net_dev), addr->dev_addr.net) &&
> -	    (!!addr->dev_addr.bound_dev_if ==
> -	     (addr->dev_addr.bound_dev_if == net_dev->ifindex)))
> -		return true;
> -	else
> -		return false;
> -}
> -
>  static struct rdma_id_private *cma_find_listener(
>  		const struct rdma_bind_list *bind_list,
>  		const struct ib_cm_id *cm_id,
> @@ -1499,14 +1476,12 @@ static struct rdma_id_private
> *cma_find_listener(
> 
>  	hlist_for_each_entry(id_priv, &bind_list->owners, node) {
>  		if (cma_match_private_data(id_priv, ib_event-
> >private_data)) {
> -			if (id_priv->id.device == cm_id->device &&
> -			    cma_match_net_dev(&id_priv->id, net_dev, req-
> >port))
> +			if (id_priv->id.device == cm_id->device)
>  				return id_priv;
>  			list_for_each_entry(id_priv_dev,
>  					    &id_priv->listen_list,
>  					    listen_list) {
> -				if (id_priv_dev->id.device == cm_id->device
> &&
> -				    cma_match_net_dev(&id_priv_dev->id,
> net_dev, req->port))
> +				if (id_priv_dev->id.device == cm_id->device)
>  					return id_priv_dev;
>  			}
>  		}
> --
> 2.14.4





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux