RDMA/nes: Change state to closing after FIN
When the driver receives an AE for FIN received, it closes the connection without changing the state of the connection in the hardware to closing. By changing the state to closing, hardware will do a normal close sequence. Signed-off-by: Faisal Latif <faisal.latif@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
dae58728dc
commit
67d7072115
1 changed files with 12 additions and 1 deletions
|
@ -3468,6 +3468,18 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
|
|||
return; /* Ignore it, wait for close complete */
|
||||
|
||||
if (atomic_inc_return(&nesqp->close_timer_started) == 1) {
|
||||
if ((tcp_state == NES_AEQE_TCP_STATE_CLOSE_WAIT) &&
|
||||
(nesqp->ibqp_state == IB_QPS_RTS)) {
|
||||
spin_lock_irqsave(&nesqp->lock, flags);
|
||||
nesqp->hw_iwarp_state = iwarp_state;
|
||||
nesqp->hw_tcp_state = tcp_state;
|
||||
nesqp->last_aeq = async_event_id;
|
||||
next_iwarp_state = NES_CQP_QP_IWARP_STATE_CLOSING;
|
||||
nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_CLOSING;
|
||||
spin_unlock_irqrestore(&nesqp->lock, flags);
|
||||
nes_hw_modify_qp(nesdev, nesqp, next_iwarp_state, 0, 0);
|
||||
nes_cm_disconn(nesqp);
|
||||
}
|
||||
nesqp->cm_id->add_ref(nesqp->cm_id);
|
||||
schedule_nes_timer(nesqp->cm_node, (struct sk_buff *)nesqp,
|
||||
NES_TIMER_TYPE_CLOSE, 1, 0);
|
||||
|
@ -3477,7 +3489,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
|
|||
nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount),
|
||||
async_event_id, nesqp->last_aeq, tcp_state);
|
||||
}
|
||||
|
||||
break;
|
||||
case NES_AEQE_AEID_LLP_CLOSE_COMPLETE:
|
||||
if (nesqp->term_flags) {
|
||||
|
|
Loading…
Reference in a new issue