diff options
Diffstat (limited to 'drivers/infiniband/hw/nes/nes_cm.c')
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 425065b36b8..a4972abedef 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -1,5 +1,5 @@  /* - * Copyright (c) 2006 - 2009 Intel Corporation.  All rights reserved. + * Copyright (c) 2006 - 2011 Intel Corporation.  All rights reserved.   *   * This software is available to you under a choice of one of two   * licenses.  You may choose to be licensed under the terms of the GNU @@ -233,6 +233,7 @@ static int send_mpa_reject(struct nes_cm_node *cm_node)  	u8 *start_ptr = &start_addr;  	u8 **start_buff = &start_ptr;  	u16 buff_len = 0; +	struct ietf_mpa_v1 *mpa_frame;  	skb = dev_alloc_skb(MAX_CM_BUFFER);  	if (!skb) { @@ -242,6 +243,8 @@ static int send_mpa_reject(struct nes_cm_node *cm_node)  	/* send an MPA reject frame */  	cm_build_mpa_frame(cm_node, start_buff, &buff_len, NULL, MPA_KEY_REPLY); +	mpa_frame = (struct ietf_mpa_v1 *)*start_buff; +	mpa_frame->flags |= IETF_MPA_FLAGS_REJECT;  	form_cm_frame(skb, cm_node, NULL, 0, *start_buff, buff_len, SET_ACK | SET_FIN);  	cm_node->state = NES_CM_STATE_FIN_WAIT1; @@ -1360,8 +1363,7 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi  				if (!memcmp(nesadapter->arp_table[arpindex].mac_addr,  					    neigh->ha, ETH_ALEN)) {  					/* Mac address same as in nes_arp_table */ -					ip_rt_put(rt); -					return rc; +					goto out;  				}  				nes_manage_arp_cache(nesvnic->netdev, @@ -1377,6 +1379,8 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi  			neigh_event_send(neigh, NULL);  		}  	} + +out:  	rcu_read_unlock();  	ip_rt_put(rt);  	return rc;  |