• Ariel Nahum's avatar
    IB/iser: Protect iser state machine with a mutex · 504130c0
    Ariel Nahum authored
    The iser connection state lookups and transitions are not fully protected.
    
    Some transitions are protected with a spinlock, and in some cases the
    state is accessed unprotected due to specific assumptions of the flow.
    
    Introduce a new mutex to protect the connection state access. We use a
    mutex since we need to also include a scheduling operations executed
    under the state lock.
    
    Each state transition/condition and its corresponding action will be
    protected with the state mutex.
    
    The rdma_cm events handler acquires the mutex when handling connection
    events. Since iser connection state can transition to DOWN
    concurrently during connection establishment, we bailout from
    addr/route resolution events when the state is not PENDING.
    
    This addresses a scenario where ep_poll retries expire during CMA
    connection establishment. In this case ep_disconnect is invoked while
    CMA events keep coming (address/route resolution, connected, etc...).
    Signed-off-by: default avatarAriel Nahum <arieln@mellanox.com>
    Signed-off-by: default avatarSagi Grimberg <sagig@mellanox.com>
    Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    504130c0
iscsi_iser.h 15.7 KB