diff options
author | Raju Rangoju <rajur@chelsio.com> | 2019-02-06 18:24:44 +0100 |
---|---|---|
committer | Jason Gunthorpe <jgg@mellanox.com> | 2019-02-09 01:02:05 +0100 |
commit | f368ff188ae4b3ef6f740a15999ea0373261b619 (patch) | |
tree | 6f9c412a4066bb10bdc362c4ca8b144947ab55eb /.clang-format | |
parent | iw_cxgb4: complete the cached SRQ buffers (diff) | |
download | linux-f368ff188ae4b3ef6f740a15999ea0373261b619.tar.xz linux-f368ff188ae4b3ef6f740a15999ea0373261b619.zip |
iw_cxgb4: fix srqidx leak during connection abort
When an application aborts the connection by moving QP from RTS to ERROR,
then iw_cxgb4's modify_rc_qp() RTS->ERROR logic sets the
*srqidxp to 0 via t4_set_wq_in_error(&qhp->wq, 0), and aborts the
connection by calling c4iw_ep_disconnect().
c4iw_ep_disconnect() does the following:
1. sends up a close_complete_upcall(ep, -ECONNRESET) to libcxgb4.
2. sends abort request CPL to hw.
But, since the close_complete_upcall() is sent before sending the
ABORT_REQ to hw, libcxgb4 would fail to release the srqidx if the
connection holds one. Because, the srqidx is passed up to libcxgb4 only
after corresponding ABORT_RPL is processed by kernel in abort_rpl().
This patch handle the corner-case by moving the call to
close_complete_upcall() from c4iw_ep_disconnect() to abort_rpl(). So that
libcxgb4 is notified about the -ECONNRESET only after abort_rpl(), and
libcxgb4 can relinquish the srqidx properly.
Signed-off-by: Raju Rangoju <rajur@chelsio.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Diffstat (limited to '.clang-format')
0 files changed, 0 insertions, 0 deletions