• A
    IB/iser: Simplify connection management · b73c3ada
    Ariel Nahum 提交于
    iSER relies on refcounting to manage iser connections establishment
    and teardown.
    
    Following commit 39ff05db ("IB/iser: Enhance disconnection logic
    for multi-pathing"), iser connection maintain 3 references:
    
     - iscsi_endpoint (at creation stage)
     - cma_id (at connection request stage)
     - iscsi_conn (at bind stage)
    
    We can avoid taking explicit refcounts by correctly serializing iser
    teardown flows (graceful and non-graceful).
    
    Our approach is to trigger a scheduled work to handle ordered teardown
    by gracefully waiting for 2 cleanup stages to complete:
    
     1. Cleanup of live pending tasks indicated by iscsi_conn_stop completion
     2. Flush errors processing
    
    Each completed stage will notify a waiting worker thread when it is
    done to allow teardwon continuation.
    
    Since iSCSI connection establishment may trigger endpoint disconnect
    without a successful endpoint connect, we rely on the iscsi <-> iser
    binding (.conn_bind) to learn about the teardown policy we should take
    wrt cleanup stages.
    
    Since all cleanup worker threads are scheduled (release_wq) in
    .ep_disconnect it is safe to assume that when module_exit is called,
    all cleanup workers are already scheduled. Thus proper module unload
    shall flush all scheduled works before allowing safe exit, to
    guarantee no resources got left behind.
    Signed-off-by: NAriel Nahum <arieln@mellanox.com>
    Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
    Reviewed-by: NRoi Dayan <roid@mellanox.com>
    Reviewed-by: NOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: NRoland Dreier <roland@purestorage.com>
    b73c3ada
iscsi_iser.h 15.7 KB