[PATCH rdma-next] RDMA/cm: Spurious WARNING triggered in cm_destroy_id()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Suppose the cm_id state is IB_CM_REP_SENT when cm_destroy_id() is
called.  Then 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().

Signed-off-by: Ka-Cheong Poon <ka-cheong.poon@xxxxxxxxxx>
---
 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 17f14e0..1c2bf18 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -1076,7 +1076,9 @@ static void cm_destroy_id(struct ib_cm_id *cm_id, int err)
 	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:
-- 
1.8.3.1




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux