• R
    IB/iser: Drain the tx cq once before looping on the rx cq · 1d6c2b73
    Roi Dayan 提交于
    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: NRoi Dayan <roid@mellanox.com>
    Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: NRoland Dreier <roland@purestorage.com>
    1d6c2b73
iser_verbs.c 32.9 KB