Re: [PATCH rdma-next 3/7] IB/core: Delete lower netdevice default GID entries in bonding scenario

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

 



On Mon, Aug 06, 2018 at 08:46:00AM +0300, Leon Romanovsky wrote:
> From: Parav Pandit <parav@xxxxxxxxxxxx>
> 
> When NETDEV_CHANGEUPPER event occurs, lower device is not yet
> established as slave of the master, and when upper device is bond
> device, default GID entries are fail to delete.
> Due to this, when bond device is fully configured, default GID entries
> of bond device cannot be added as default GID entries are occupied by
> the lower netdevice. This is incorrect. Default GID entries should
> really be of bond netdevice because in all RoCE GIDs (default or IP),
> MAC address of the bond device will be used.
> It is confusing to have default GID of netdevice which is not really used
> for any purpose.
> 
> Therefore, as first step, implement
> (a) filter function which filters if a CHANGEUPPER event netdevice and
> associated upper device is master device or not.
> (b) callback function which deletes the default GIDs of lower (event
> netdevice).
> 
> Signed-off-by: Parav Pandit <parav@xxxxxxxxxxxx>
> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
>  drivers/infiniband/core/roce_gid_mgmt.c | 69 ++++++++++++++++++++++++++++-----
>  1 file changed, 60 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/infiniband/core/roce_gid_mgmt.c b/drivers/infiniband/core/roce_gid_mgmt.c
> index c7cf3c7f38a6..6fcd7aeee059 100644
> +++ b/drivers/infiniband/core/roce_gid_mgmt.c
> @@ -208,6 +208,33 @@ static int upper_device_filter(struct ib_device *ib_dev, u8 port,
>  	return res;
>  }
>  
> +/**
> + * is_upper_ndev_bond_master_filter - Check if a given netdevice
> + * is bond master device of netdevice of the the RDMA device of port.
> + * @ib_dev:		IB device to check
> + * @port:		Port to consider for adding default GID
> + * @rdma_ndev:		Pointer to rdma netdevice
> + * @cookie_ndev:	Netdevice to consider to form a default GID
> + *
> + * is_upper_ndev_bond_master_filter() returns true if a cookie_netdev
> + * is bond master device and rdma_ndev is its lower netdevice. It might
> + * not have been established as slave device yet.
> + */
> +static int
> +is_upper_ndev_bond_master_filter(struct ib_device *ib_dev, u8 port,
> +				 struct net_device *rdma_ndev,
> +				 void *cookie_ndev)
> +{
> +	bool match = false;
> +
> +	rcu_read_lock();
> +	if (netif_is_bond_master(cookie_ndev) &&
> +	    rdma_is_upper_dev_rcu(rdma_ndev, cookie_ndev))

Can we please not rely on implicit casts from void * in function
parameters. This makes it hard to change code - if someday we rework
rdma_is_upper_dev_rcu() the compiler no longer protects us against
wrong argument types.

Add

struct net_device *ndev = cookie_ndev;

And use that.

Same comment across all these patches

> +/**
> + * del_default_gids - Delete default GIDs of the event/cookie netdevice
> + * @ib_dev:	RDMA device pointer
> + * @port:	Port of the RDMA device whose GID table to consider
> + * @rdma_ndev:	Unused rdma netdevice
> + * @cookie:	Pointer to event netdevice
> + *
> + * del_default_gids() deletes the default GIDs of the event/cookie netdevice.
> + */
> +static void del_default_gids(struct ib_device *ib_dev, u8 port,
> +			     struct net_device *rdma_ndev, void *cookie)
> +{
> +	unsigned long gid_type_mask;
> +
> +	gid_type_mask = roce_gid_type_mask_support(ib_dev, port);
> +
> +	ib_cache_gid_set_default_gid(ib_dev, port, cookie, gid_type_mask,
> +				     IB_CACHE_GID_DEFAULT_MODE_DELETE);

Here too

Jason



[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