|  | @@ -535,17 +535,11 @@ static int ipoib_open ( struct net_device *netdev ) {
 | 
		
	
		
			
			| 535 | 535 |  	/* Fill receive rings */
 | 
		
	
		
			
			| 536 | 536 |  	ib_refill_recv ( ibdev, ipoib->qp );
 | 
		
	
		
			
			| 537 | 537 |  
 | 
		
	
		
			
			| 538 |  | -	/* Join broadcast group */
 | 
		
	
		
			
			| 539 |  | -	if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) {
 | 
		
	
		
			
			| 540 |  | -		DBGC ( ipoib, "IPoIB %p could not join broadcast group: %s\n",
 | 
		
	
		
			
			| 541 |  | -		       ipoib, strerror ( rc ) );
 | 
		
	
		
			
			| 542 |  | -		goto err_join_broadcast;
 | 
		
	
		
			
			| 543 |  | -	}
 | 
		
	
		
			
			|  | 538 | +	/* Fake a link status change to join the broadcast group */
 | 
		
	
		
			
			|  | 539 | +	ipoib_link_state_changed ( ibdev );
 | 
		
	
		
			
			| 544 | 540 |  
 | 
		
	
		
			
			| 545 | 541 |  	return 0;
 | 
		
	
		
			
			| 546 | 542 |  
 | 
		
	
		
			
			| 547 |  | -	ipoib_leave_broadcast_group ( ipoib );
 | 
		
	
		
			
			| 548 |  | - err_join_broadcast:
 | 
		
	
		
			
			| 549 | 543 |  	ib_destroy_qp ( ibdev, ipoib->qp );
 | 
		
	
		
			
			| 550 | 544 |   err_create_qp:
 | 
		
	
		
			
			| 551 | 545 |  	ib_destroy_cq ( ibdev, ipoib->cq );
 | 
		
	
	
		
			
			|  | @@ -639,7 +633,8 @@ void ipoib_link_state_changed ( struct ib_device *ibdev ) {
 | 
		
	
		
			
			| 639 | 633 |  	ipoib_set_ib_params ( ipoib );
 | 
		
	
		
			
			| 640 | 634 |  
 | 
		
	
		
			
			| 641 | 635 |  	/* Join new broadcast group */
 | 
		
	
		
			
			| 642 |  | -	if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) {
 | 
		
	
		
			
			|  | 636 | +	if ( ib_link_ok ( ibdev ) &&
 | 
		
	
		
			
			|  | 637 | +	     ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) ) {
 | 
		
	
		
			
			| 643 | 638 |  		DBGC ( ipoib, "IPoIB %p could not rejoin broadcast group: "
 | 
		
	
		
			
			| 644 | 639 |  		       "%s\n", ipoib, strerror ( rc ) );
 | 
		
	
		
			
			| 645 | 640 |  		return;
 |