Skip to content

Commit

Permalink
cxgb4i: send abort_rpl correctly
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Anish Bhatt authored and Christoph Hellwig committed Nov 10, 2014
1 parent d8ae3c3 commit 7b07bf2
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 16 deletions.
15 changes: 9 additions & 6 deletions drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
18 changes: 8 additions & 10 deletions drivers/scsi/cxgbi/libcxgbi.c
Original file line number Diff line number Diff line change
Expand Up @@ -905,18 +905,16 @@ void cxgbi_sock_rcv_abort_rpl(struct cxgbi_sock *csk)
{
cxgbi_sock_get(csk);
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_RCVD))
cxgbi_sock_set_flag(csk, CTPF_ABORT_RPL_RCVD);
else {
cxgbi_sock_clear_flag(csk, CTPF_ABORT_RPL_RCVD);
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);
}
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);
}
Expand Down

0 comments on commit 7b07bf2

Please sign in to comment.