• Hariprasad S's avatar
    RDMA/iw_cxgb4: release ep resources on accept arp failure · 9dec900c
    Hariprasad S authored
    If ARP fails before the CPL_PASS_ACCEPT_RPL is seen by hardware, the tid
    will be stuck in SYN_PEND and never released.  So create an arp failure
    handler specifically for this message to release the endpoint resources.
    
    In pass_accept_rpl_arp_failure(), put the parent endpoint so it will
    be freed when destroyed.  Also we don't need to call release_tid() here
    because _c4iw_free_ep() calls cxgb4_remove_tid() which releases the
    hwtid.
    
    If we get an ABORT_REQ_RSS instead of a PASS_ESTABLISH (because the
    peer's ACK to our SYN is never received), then put the parent as well
    in peer_abort().
    
    Treat accept_cr() failures just like arp failures: put the parent ep
    and release the ep resources destroying the tid
    
    The ARP failure handlers are called in an atomic context, so we need to
    schedule some of the processing which might block.  Namely _c4iw_free_ep()
    which needs a mutex.  So create a "special" CPL opcode and handler and
    schedule it via sched() to be run by process_work() in a blockable context.
    
    Also rework the active open arp failure handler to make use of
    release_ep_resources().  This allows both the active and passive arp
    failure handlers to use the same deferred cleanup function.
    Signed-off-by: default avatarSteve Wise <swise@opengridcomputing.com>
    Signed-off-by: default avatarHariprasad Shenai <hariprasad@chelsio.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    9dec900c
cm.c 112 KB