On Tue, Aug 14, 2018 at 10:36:14AM +0300, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > Changelog v0->v1: > * Don't rely on explicit pointer casting from void to required by > functions where it is supplied - Patch 3 and 5. > > >From Parav, > > Currently RoCE LAG/Bonding has following issues. > > 1. When NETDEV_CHANGEUPPER occurs, netdevice_event_changeupper() attempts to > delete default GID entries of the upper device, but they are actually > added based on lower netdev, so bonding_default_del_cmd() fails to > delete such entries. > > 2. Due to that when master bond device is fully setup, its default GID > entries cannot be added because old entries exist. This is incorrect and > confusing; when using bonding/lag mode, always add the default GID entries > for the master bond device. So implement a filter, callback function to detect > the master-slave relationship in bonding mode and delete the lower netdev's > default GIDs and add master bond device's default GIDs. > > 3. When FAILOVER event occurs, it cannot delete the master bond device's > default GIDs they are of lower netdevice during NETDEV_UP event handling. > So always add default GIDs of master bond netdevice if bonding is used > for rdma device's netdevice. > > 4. When MAC address is changed, it only updates the default GID entries. > IP based GIDs are untouched, but it is incorrect. Some HCAs such as mlx5 > GIDs contains the MAC address as well at HCA hardware level. Therefore > update (delete/add) IP based GIDs as well. Applied to for-next, I fixed these compile warnings: drivers/infiniband/core/roce_gid_mgmt.c:266: warning: Function parameter or member 'cookie' not described in 'is_upper_ndev_bond_master_filter' drivers/infiniband/core/roce_gid_mgmt.c:266: warning: Excess function parameter 'cookie_ndev' description in 'is_upper_ndev_bond_master_filter' drivers/infiniband/core/roce_gid_mgmt.c:507: warning: Function parameter or member 'ib_dev' not described in 'rdma_roce_rescan_device' drivers/infiniband/core/roce_gid_mgmt.c:507: warning: Excess function parameter 'device' description in 'rdma_roce_rescan_device' and some other wonky things with this diff: diff --git a/drivers/infiniband/core/roce_gid_mgmt.c b/drivers/infiniband/core/roce_gid_mgmt.c index 9ff2a72379bada..ee366199b169ca 100644 --- a/drivers/infiniband/core/roce_gid_mgmt.c +++ b/drivers/infiniband/core/roce_gid_mgmt.c @@ -201,7 +201,7 @@ is_ndev_for_default_gid_filter(struct ib_device *ib_dev, u8 port, struct net_device *rdma_ndev, void *cookie) { struct net_device *cookie_ndev = cookie; - int res; + bool res; if (!rdma_ndev) return false; @@ -232,7 +232,7 @@ static bool pass_all_filter(struct ib_device *ib_dev, u8 port, static bool upper_device_filter(struct ib_device *ib_dev, u8 port, struct net_device *rdma_ndev, void *cookie) { - int res; + bool res; if (!rdma_ndev) return false; @@ -253,7 +253,7 @@ static bool upper_device_filter(struct ib_device *ib_dev, u8 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 + * @cookie: 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 @@ -293,7 +293,7 @@ static void update_gid_ip(enum gid_op_type gid_op, static void bond_delete_netdev_default_gids(struct ib_device *ib_dev, u8 port, struct net_device *rdma_ndev, - void *event_ndev) + struct net_device *event_ndev) { struct net_device *real_dev = rdma_vlan_dev_real_dev(event_ndev); unsigned long gid_type_mask; Jason