@@ -67,8 +67,8 @@ static const char * const cma_events[] = {
67
67
[RDMA_CM_EVENT_TIMEWAIT_EXIT ] = "timewait exit" ,
68
68
};
69
69
70
- static void cma_set_mgid (struct rdma_id_private * id_priv , struct sockaddr * addr ,
71
- union ib_gid * mgid );
70
+ static void cma_iboe_set_mgid (struct sockaddr * addr , union ib_gid * mgid ,
71
+ enum ib_gid_type gid_type );
72
72
73
73
const char * __attribute_const__ rdma_event_msg (enum rdma_cm_event_type event )
74
74
{
@@ -1846,17 +1846,19 @@ static void destroy_mc(struct rdma_id_private *id_priv,
1846
1846
if (dev_addr -> bound_dev_if )
1847
1847
ndev = dev_get_by_index (dev_addr -> net ,
1848
1848
dev_addr -> bound_dev_if );
1849
- if (ndev ) {
1849
+ if (ndev && !send_only ) {
1850
+ enum ib_gid_type gid_type ;
1850
1851
union ib_gid mgid ;
1851
1852
1852
- cma_set_mgid ( id_priv , ( struct sockaddr * ) & mc -> addr ,
1853
- & mgid );
1854
-
1855
- if (! send_only )
1856
- cma_igmp_send ( ndev , & mgid , false);
1857
-
1858
- dev_put (ndev );
1853
+ gid_type = id_priv -> cma_dev -> default_gid_type
1854
+ [ id_priv -> id . port_num -
1855
+ rdma_start_port (
1856
+ id_priv -> cma_dev -> device )];
1857
+ cma_iboe_set_mgid (( struct sockaddr * ) & mc -> addr , & mgid ,
1858
+ gid_type );
1859
+ cma_igmp_send (ndev , & mgid , false );
1859
1860
}
1861
+ dev_put (ndev );
1860
1862
1861
1863
cancel_work_sync (& mc -> iboe_join .work );
1862
1864
}
0 commit comments