Skip to content

Commit

Permalink
RDMA/iw_cxgb4: Do not stop timer in case of incomplete messages
Browse files Browse the repository at this point in the history
In case of incomplete mpa messages we should not stop timer as it
results in return with timeout for the next mpa message

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
  • Loading branch information
Hariprasad S authored and Doug Ledford committed May 13, 2016
1 parent 8d1f1a6 commit da1cecd
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions drivers/infiniband/hw/cxgb4/cm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1395,21 +1395,13 @@ static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)

PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid);

/*
* Stop mpa timer. If it expired, then
* we ignore the MPA reply. process_timeout()
* will abort the connection.
*/
if (stop_ep_timer(ep))
return 0;

/*
* If we get more than the supported amount of private data
* then we must fail this connection.
*/
if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt)) {
err = -EINVAL;
goto err;
goto err_stop_timer;
}

/*
Expand All @@ -1431,11 +1423,11 @@ static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)
printk(KERN_ERR MOD "%s MPA version mismatch. Local = %d,"
" Received = %d\n", __func__, mpa_rev, mpa->revision);
err = -EPROTO;
goto err;
goto err_stop_timer;
}
if (memcmp(mpa->key, MPA_KEY_REP, sizeof(mpa->key))) {
err = -EPROTO;
goto err;
goto err_stop_timer;
}

plen = ntohs(mpa->private_data_size);
Expand All @@ -1445,15 +1437,15 @@ static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)
*/
if (plen > MPA_MAX_PRIVATE_DATA) {
err = -EPROTO;
goto err;
goto err_stop_timer;
}

/*
* If plen does not account for pkt size
*/
if (ep->mpa_pkt_len > (sizeof(*mpa) + plen)) {
err = -EPROTO;
goto err;
goto err_stop_timer;
}

ep->plen = (u8) plen;
Expand All @@ -1467,9 +1459,17 @@ static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)

if (mpa->flags & MPA_REJECT) {
err = -ECONNREFUSED;
goto err;
goto err_stop_timer;
}

/*
* Stop mpa timer. If it expired, then
* we ignore the MPA reply. process_timeout()
* will abort the connection.
*/
if (stop_ep_timer(ep))
return 0;

/*
* If we get here we have accumulated the entire mpa
* start reply message including private data. And
Expand Down Expand Up @@ -1609,6 +1609,8 @@ static int process_mpa_reply(struct c4iw_ep *ep, struct sk_buff *skb)
goto out;
}
goto out;
err_stop_timer:
stop_ep_timer(ep);
err:
disconnect = 2;
out:
Expand Down

0 comments on commit da1cecd

Please sign in to comment.