diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index e130d2e8951524be434776e0e5d8f561c0c96256..f35fcc4c06389e77f260254cd8b2943b6e5d77de 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -685,6 +685,8 @@ static void cm_enter_timewait(struct cm_id_private *cm_id_priv)
 {
 	int wait_time;
 
+	cm_cleanup_timewait(cm_id_priv->timewait_info);
+
 	/*
 	 * The cm_id could be destroyed by the user before we exit timewait.
 	 * To protect against this, we search for the cm_id after exiting