diff options
Diffstat (limited to 'drivers/infiniband/hw/cxgb4/cm.c')
| -rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index b36cdac9c55..0747004313a 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c @@ -542,8 +542,10 @@ static void send_mpa_req(struct c4iw_ep *ep, struct sk_buff *skb,  		     (mpa_rev_to_use == 2 ? MPA_ENHANCED_RDMA_CONN : 0);  	mpa->private_data_size = htons(ep->plen);  	mpa->revision = mpa_rev_to_use; -	if (mpa_rev_to_use == 1) +	if (mpa_rev_to_use == 1) {  		ep->tried_with_mpa_v1 = 1; +		ep->retry_with_mpa_v1 = 0; +	}  	if (mpa_rev_to_use == 2) {  		mpa->private_data_size += @@ -1594,6 +1596,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)  		goto reject;  	}  	dst = &rt->dst; +	rcu_read_lock();  	neigh = dst_get_neighbour(dst);  	if (neigh->dev->flags & IFF_LOOPBACK) {  		pdev = ip_dev_find(&init_net, peer_ip); @@ -1620,6 +1623,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)  		rss_qid = dev->rdev.lldi.rxq_ids[  			  cxgb4_port_idx(neigh->dev) * step];  	} +	rcu_read_unlock();  	if (!l2t) {  		printk(KERN_ERR MOD "%s - failed to allocate l2t entry!\n",  		       __func__); @@ -1820,6 +1824,7 @@ static int c4iw_reconnect(struct c4iw_ep *ep)  	}  	ep->dst = &rt->dst; +	rcu_read_lock();  	neigh = dst_get_neighbour(ep->dst);  	/* get a l2t entry */ @@ -1856,6 +1861,7 @@ static int c4iw_reconnect(struct c4iw_ep *ep)  		ep->rss_qid = ep->com.dev->rdev.lldi.rxq_ids[  			cxgb4_port_idx(neigh->dev) * step];  	} +	rcu_read_unlock();  	if (!ep->l2t) {  		printk(KERN_ERR MOD "%s - cannot alloc l2e.\n", __func__);  		err = -ENOMEM; @@ -2301,6 +2307,7 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)  	}  	ep->dst = &rt->dst; +	rcu_read_lock();  	neigh = dst_get_neighbour(ep->dst);  	/* get a l2t entry */ @@ -2339,6 +2346,7 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)  		ep->retry_with_mpa_v1 = 0;  		ep->tried_with_mpa_v1 = 0;  	} +	rcu_read_unlock();  	if (!ep->l2t) {  		printk(KERN_ERR MOD "%s - cannot alloc l2e.\n", __func__);  		err = -ENOMEM;  |