• Parav Pandit's avatar
    IB/core: Fix deleting default GIDs when changing mac adddress · dc5640f2
    Parav Pandit authored
    Before [1], When MAC address of the netdevice is changed, default GID is
    supposed to get deleted and added back which affects the node and/or port
    GUID in below sequence.
    
    netdevice_event()
    -> NETDEV_CHANGEADDR
       default_del_cmd()
          del_netdev_default_ips()
              bond_delete_netdev_default_gids()
                  ib_cache_gid_set_default_gid()
                      ib_cache_gid_del()
       add_cmd()
       [..]
    
    However, ib_cache_gid_del() was not getting invoked in non bonding
    scenarios because event_ndev and rdma_ndev are same.
    Therefore, fix such condition to ignore checking upper device when event
    ndev and rdma_dev are same; similar to bond_set_netdev_default_gids().
    
    Which this fix ib_cache_gid_del() is invoked correctly; however
    ib_cache_gid_del() doesn't find the default GID for deletion because
    find_gid() was given default_gid = false with
    GID_ATTR_FIND_MASK_DEFAULT set.
    But it was getting overwritten by ib_cache_gid_set_default_gid() later
    on as part of add_cmd().
    Therefore, mac address change used to work for default GID.
    
    With refactor series [1], this incorrect behavior is detected.
    
    Therefore,
    when deleting default GID, set default_gid and set MASK flag.
    when deleting IP based GID, clear default_gid and set MASK flag.
    
    [1] https://patchwork.kernel.org/patch/10319151/
    
    Fixes: 238fdf48 ("IB/core: Add RoCE table bonding support")
    Fixes: 598ff6ba ("IB/core: Refactor GID modify code for RoCE")
    Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    dc5640f2
cache.c 32.8 KB