cxgb4i: send abort_rpl correctly
Connection retries were not being cleaned up correctly if they failed as a result of link down. Applies on top of drivers-for-3.18. Signed-off-by: Anish Bhatt <anish@chelsio.com> Signed-off-by: Karen Xie <kxie@chelsio.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Родитель
d8ae3c3359
Коммит
7b07bf244a
|
@ -936,20 +936,23 @@ static void do_abort_req_rss(struct cxgbi_device *cdev, struct sk_buff *skb)
|
|||
cxgbi_sock_get(csk);
|
||||
spin_lock_bh(&csk->lock);
|
||||
|
||||
if (!cxgbi_sock_flag(csk, CTPF_ABORT_REQ_RCVD)) {
|
||||
cxgbi_sock_set_flag(csk, CTPF_ABORT_REQ_RCVD);
|
||||
cxgbi_sock_set_state(csk, CTP_ABORTING);
|
||||
goto done;
|
||||
cxgbi_sock_clear_flag(csk, CTPF_ABORT_REQ_RCVD);
|
||||
|
||||
if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) {
|
||||
send_tx_flowc_wr(csk);
|
||||
cxgbi_sock_set_flag(csk, CTPF_TX_DATA_SENT);
|
||||
}
|
||||
|
||||
cxgbi_sock_clear_flag(csk, CTPF_ABORT_REQ_RCVD);
|
||||
cxgbi_sock_set_flag(csk, CTPF_ABORT_REQ_RCVD);
|
||||
cxgbi_sock_set_state(csk, CTP_ABORTING);
|
||||
|
||||
send_abort_rpl(csk, rst_status);
|
||||
|
||||
if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) {
|
||||
csk->err = abort_status_to_errno(csk, req->status, &rst_status);
|
||||
cxgbi_sock_closed(csk);
|
||||
}
|
||||
done:
|
||||
|
||||
spin_unlock_bh(&csk->lock);
|
||||
cxgbi_sock_put(csk);
|
||||
rel_skb:
|
||||
|
|
|
@ -905,18 +905,16 @@ void cxgbi_sock_rcv_abort_rpl(struct cxgbi_sock *csk)
|
|||
{
|
||||
cxgbi_sock_get(csk);
|
||||
spin_lock_bh(&csk->lock);
|
||||
if (cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) {
|
||||
if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_RCVD))
|
||||
|
||||
cxgbi_sock_set_flag(csk, CTPF_ABORT_RPL_RCVD);
|
||||
else {
|
||||
cxgbi_sock_clear_flag(csk, CTPF_ABORT_RPL_RCVD);
|
||||
if (cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) {
|
||||
cxgbi_sock_clear_flag(csk, CTPF_ABORT_RPL_PENDING);
|
||||
if (cxgbi_sock_flag(csk, CTPF_ABORT_REQ_RCVD))
|
||||
pr_err("csk 0x%p,%u,0x%lx,%u,ABT_RPL_RSS.\n",
|
||||
csk, csk->state, csk->flags, csk->tid);
|
||||
cxgbi_sock_closed(csk);
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_bh(&csk->lock);
|
||||
cxgbi_sock_put(csk);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче