]> git.baikalelectronics.ru Git - kernel.git/commit
RDMA/cm: Spurious WARNING triggered in cm_destroy_id()
authorKa-Cheong Poon <ka-cheong.poon@oracle.com>
Wed, 3 Jun 2020 13:33:38 +0000 (06:33 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 3 Jun 2020 18:48:18 +0000 (15:48 -0300)
commit0237ef531edde0f7328558c759b475d0d50789f8
treefe46b35f62f890d7f7eb1976927c8166c7db3838
parent650ee3fa8c78879b23a3f64cb070f67bd5624898
RDMA/cm: Spurious WARNING triggered in cm_destroy_id()

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: a9415fc9a0ca ("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>
drivers/infiniband/core/cm.c