]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
mpxyd: move to CONN state immediately on RTU_IN
authorArlin Davis <arlin.r.davis@intel.com>
Wed, 5 Mar 2014 22:07:43 +0000 (14:07 -0800)
committerArlin Davis <arlin.r.davis@intel.com>
Wed, 5 Mar 2014 22:07:43 +0000 (14:07 -0800)
reject RW_imm messages from remote proxy-in if
in disconnected state.

Signed-off-by: Arlin Davis <arlin.r.davis@intel.com>
dapl/svc/mcm.c
dapl/svc/mix.c
dapl/svc/mpxy_in.c

index 1f300f3a8ff605f7bd4bfdf955825d3ce222e9c4..39babdc5ff0f01d436b185a48504b3b8a6294ab4 100644 (file)
@@ -995,6 +995,7 @@ static void mcm_process_recv(mcm_ib_dev_t *md, dat_mcm_msg_t *msg, mcm_cm_t *cm,
        case MCM_RTU_PENDING: /* passive */
                mlog(2, "RTU_PENDING: cm %p, my_id %d, cm_id %d\n",
                        cm, cm->entry.tid, cm->cm_id);
+               cm->state = MCM_CONNECTED;
                mpxy_unlock(&cm->lock);
                MCNTR(md, MCM_CM_RTU_IN);
                mix_cm_rtu_in(cm, msg, len);
index 93f1ee1767a47e8fa8fe2432816a2a1fa49da0b5..cd95d4236b3846473d44bb3593cb8059e440cf23 100644 (file)
@@ -189,7 +189,7 @@ err:
                mlog(0, " ERR: snd on new_ep %d, ret %d, exp %d\n", op_ep, ret, len);
                if (smd) {
                        mix_close_device(smd->md, smd);
-                       return;
+                       smd = NULL;
                }
        }
 
@@ -1464,12 +1464,10 @@ int mix_cm_rtu_in(mcm_cm_t *m_cm, dat_mcm_msg_t *pkt, int pkt_len)
        mpxy_lock(&m_cm->smd->evlock);
        if (scif_send_msg(m_cm->smd->scif_ev_ep, (void*)&msg, len)) {
                mpxy_unlock(&m_cm->smd->evlock);
+               mcm_cm_disc(m_cm);
                return -1;
        }
        mpxy_unlock(&m_cm->smd->evlock);
-       mpxy_lock(&m_cm->lock);
-       m_cm->state = MCM_CONNECTED;
-       mpxy_unlock(&m_cm->lock);
        return 0;
 }
 
index 64464022a602742d240b79e2b5de701622efa101..25bcd71e280ad8a86e4a066e67bf27b73f8474b8 100644 (file)
@@ -1111,8 +1111,8 @@ retry:
                                        ntohl(wc[i].imm_data), m_qp->ib_qp2->state);
                        continue;
                }
-               if (m_qp->cm && (m_qp->cm->state != MCM_CONNECTED)) {
-                       mlog(1," WARN: RX data on DISC m_qp %p qp1 %p qp2 %p\n",
+               if (m_qp->cm && (m_qp->cm->state == MCM_DISCONNECTED)) {
+                       mlog(1," WARN: RX data on DISC m_qp %p qp1 %p qp2 %p %s\n",
                                m_qp, m_qp->ib_qp1, m_qp->ib_qp2,
                                mcm_state_str(m_qp->cm->state));
                        continue;