diff options
author | Roi Dayan <roid@mellanox.com> | 2014-04-01 16:28:38 +0300 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-04-01 11:09:46 -0700 |
commit | 1d6c2b736fd251c1f827704b1234d81b28c112d6 (patch) | |
tree | e2d21beff3ae208830a32f750d3c97e24d99cae9 /drivers/infiniband/ulp/iser/iscsi_iser.h | |
parent | 39c978cd1704dc03f6913bd40f858def7fd31185 (diff) | |
download | linux-1d6c2b736fd251c1f827704b1234d81b28c112d6.tar.gz linux-1d6c2b736fd251c1f827704b1234d81b28c112d6.tar.bz2 linux-1d6c2b736fd251c1f827704b1234d81b28c112d6.zip |
IB/iser: Drain the tx cq once before looping on the rx cq
The iser disconnection flow isn't done before all the inflight
recv/send buffers posted to the QP are either flushed or normally
completed to the CQ that serves this connection. The condition check
is done in iser_handle_comp_error().
Currently, it's possible for the send buffer completion that makes the
posted send buffers counter reach zero to be polled in the drain tx
call, which is after the rx cq is fully drained. Since this
completion might be not an error one (for example, it might be a
completion of the logout request iSCSI PDU) we will skip
iser_handle_comp_error(). So the connection will never terminate from
the iscsi stack point of view, and we hang.
To resolve this race, do the draining of the tx cq before the loop on
the rx cq.
Signed-off-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/ulp/iser/iscsi_iser.h')
0 files changed, 0 insertions, 0 deletions