summaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/ulp/iser/iscsi_iser.h
diff options
context:
space:
mode:
authorRoi Dayan <roid@mellanox.com>2014-04-01 16:28:38 +0300
committerRoland Dreier <roland@purestorage.com>2014-04-01 11:09:46 -0700
commit1d6c2b736fd251c1f827704b1234d81b28c112d6 (patch)
treee2d21beff3ae208830a32f750d3c97e24d99cae9 /drivers/infiniband/ulp/iser/iscsi_iser.h
parent39c978cd1704dc03f6913bd40f858def7fd31185 (diff)
downloadlinux-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