• Ralph Campbell's avatar
    IB/mad: Fix ib_post_send_mad() returning 0 with no generate send comp · 4780c195
    Ralph Campbell authored
    If ib_post_send_mad() returns 0, the API guarantees that there will be
    a callback to send_buf->mad_agent->send_handler() so that the sender
    can call ib_free_send_mad().  Otherwise, the ib_mad_send_buf will be
    leaked and the mad_agent reference count will never go to zero and the
    IB device module cannot be unloaded.  The above can happen without
    this patch if process_mad() returns (IB_MAD_RESULT_SUCCESS |
    IB_MAD_RESULT_CONSUMED).
    
    If process_mad() returns IB_MAD_RESULT_SUCCESS and there is no agent
    registered to receive the mad being sent, handle_outgoing_dr_smp()
    returns zero which causes a MAD packet which is at the end of the
    directed route to be incorrectly sent on the wire but doesn't cause a
    hang since the HCA generates a send completion.
    Signed-off-by: default avatarRalph Campbell <ralph.campbell@qlogic.com>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    4780c195
mad.c 83.6 KB