|
@@ -624,17 +624,6 @@ static void cm_conn_req_handler(struct iwcm_id_private *listen_id_priv,
|
|
|
*/
|
|
|
BUG_ON(iw_event->status);
|
|
|
|
|
|
- /*
|
|
|
- * We could be destroying the listening id. If so, ignore this
|
|
|
- * upcall.
|
|
|
- */
|
|
|
- spin_lock_irqsave(&listen_id_priv->lock, flags);
|
|
|
- if (listen_id_priv->state != IW_CM_STATE_LISTEN) {
|
|
|
- spin_unlock_irqrestore(&listen_id_priv->lock, flags);
|
|
|
- goto out;
|
|
|
- }
|
|
|
- spin_unlock_irqrestore(&listen_id_priv->lock, flags);
|
|
|
-
|
|
|
cm_id = iw_create_cm_id(listen_id_priv->id.device,
|
|
|
listen_id_priv->id.cm_handler,
|
|
|
listen_id_priv->id.context);
|
|
@@ -649,6 +638,19 @@ static void cm_conn_req_handler(struct iwcm_id_private *listen_id_priv,
|
|
|
cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
|
|
|
cm_id_priv->state = IW_CM_STATE_CONN_RECV;
|
|
|
|
|
|
+ /*
|
|
|
+ * We could be destroying the listening id. If so, ignore this
|
|
|
+ * upcall.
|
|
|
+ */
|
|
|
+ spin_lock_irqsave(&listen_id_priv->lock, flags);
|
|
|
+ if (listen_id_priv->state != IW_CM_STATE_LISTEN) {
|
|
|
+ spin_unlock_irqrestore(&listen_id_priv->lock, flags);
|
|
|
+ iw_cm_reject(cm_id, NULL, 0);
|
|
|
+ iw_destroy_cm_id(cm_id);
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+ spin_unlock_irqrestore(&listen_id_priv->lock, flags);
|
|
|
+
|
|
|
ret = alloc_work_entries(cm_id_priv, 3);
|
|
|
if (ret) {
|
|
|
iw_cm_reject(cm_id, NULL, 0);
|