lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 320/477] RDMA/cm: Spurious WARNING triggered in cm_destroy_id()
    Date
    From: Ka-Cheong Poon <ka-cheong.poon@oracle.com>

    [ Upstream commit fba97dc7fc76b2c9a909fa0b3786d30a9899f5cf ]

    If the cm_id state is IB_CM_REP_SENT when cm_destroy_id() is called, it
    calls cm_send_rej_locked().

    In cm_send_rej_locked(), it calls cm_enter_timewait() and the state is
    changed to IB_CM_TIMEWAIT.

    Now back to cm_destroy_id(), it breaks from the switch statement, and the
    next call is WARN_ON(cm_id->state != IB_CM_IDLE).

    This triggers a spurious warning. Instead, the code should goto retest
    after returning from cm_send_rej_locked() to move the state to IDLE.

    Fixes: 67b3c8dceac6 ("RDMA/cm: Make sure the cm_id is in the IB_CM_IDLE state in destroy")
    Link: https://lore.kernel.org/r/1591191218-9446-1-git-send-email-ka-cheong.poon@oracle.com
    Signed-off-by: Ka-Cheong Poon <ka-cheong.poon@oracle.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/core/cm.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
    index 17f14e0eafe4d..1c2bf18cda9f6 100644
    --- a/drivers/infiniband/core/cm.c
    +++ b/drivers/infiniband/core/cm.c
    @@ -1076,7 +1076,9 @@ retest:
    case IB_CM_REP_SENT:
    case IB_CM_MRA_REP_RCVD:
    ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg);
    - /* Fall through */
    + cm_send_rej_locked(cm_id_priv, IB_CM_REJ_CONSUMER_DEFINED, NULL,
    + 0, NULL, 0);
    + goto retest;
    case IB_CM_MRA_REQ_SENT:
    case IB_CM_REP_RCVD:
    case IB_CM_MRA_REP_SENT:
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:31    [W:2.142 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site