Commit 7b07bf24 authored by Anish Bhatt's avatar Anish Bhatt Committed by Christoph Hellwig

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: default avatarAnish Bhatt <anish@chelsio.com>
Signed-off-by: default avatarKaren Xie <kxie@chelsio.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent d8ae3c33
...@@ -936,20 +936,23 @@ static void do_abort_req_rss(struct cxgbi_device *cdev, struct sk_buff *skb) ...@@ -936,20 +936,23 @@ static void do_abort_req_rss(struct cxgbi_device *cdev, struct sk_buff *skb)
cxgbi_sock_get(csk); cxgbi_sock_get(csk);
spin_lock_bh(&csk->lock); spin_lock_bh(&csk->lock);
if (!cxgbi_sock_flag(csk, CTPF_ABORT_REQ_RCVD)) { 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); if (!cxgbi_sock_flag(csk, CTPF_TX_DATA_SENT)) {
goto done; 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); send_abort_rpl(csk, rst_status);
if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) { if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) {
csk->err = abort_status_to_errno(csk, req->status, &rst_status); csk->err = abort_status_to_errno(csk, req->status, &rst_status);
cxgbi_sock_closed(csk); cxgbi_sock_closed(csk);
} }
done:
spin_unlock_bh(&csk->lock); spin_unlock_bh(&csk->lock);
cxgbi_sock_put(csk); cxgbi_sock_put(csk);
rel_skb: rel_skb:
......
...@@ -905,18 +905,16 @@ void cxgbi_sock_rcv_abort_rpl(struct cxgbi_sock *csk) ...@@ -905,18 +905,16 @@ void cxgbi_sock_rcv_abort_rpl(struct cxgbi_sock *csk)
{ {
cxgbi_sock_get(csk); cxgbi_sock_get(csk);
spin_lock_bh(&csk->lock); spin_lock_bh(&csk->lock);
cxgbi_sock_set_flag(csk, CTPF_ABORT_RPL_RCVD);
if (cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) { if (cxgbi_sock_flag(csk, CTPF_ABORT_RPL_PENDING)) {
if (!cxgbi_sock_flag(csk, CTPF_ABORT_RPL_RCVD)) cxgbi_sock_clear_flag(csk, CTPF_ABORT_RPL_PENDING);
cxgbi_sock_set_flag(csk, CTPF_ABORT_RPL_RCVD); if (cxgbi_sock_flag(csk, CTPF_ABORT_REQ_RCVD))
else { pr_err("csk 0x%p,%u,0x%lx,%u,ABT_RPL_RSS.\n",
cxgbi_sock_clear_flag(csk, CTPF_ABORT_RPL_RCVD); csk, csk->state, csk->flags, csk->tid);
cxgbi_sock_clear_flag(csk, CTPF_ABORT_RPL_PENDING); cxgbi_sock_closed(csk);
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); spin_unlock_bh(&csk->lock);
cxgbi_sock_put(csk); cxgbi_sock_put(csk);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment