From: Sean Hefty Date: Thu, 21 Jan 2010 06:09:19 +0000 (+0000) Subject: winverbs/ep: handle receiving REQ then DREQ X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=5608b71ba4d4aad62787be9badf9bd18901e5307;p=~shefty%2Frdma-win.git winverbs/ep: handle receiving REQ then DREQ For fast connections, it's possible to receive a DREQ immediately after receiving a REQ, without an RTU coming in between. If we've sent a REP to the REQ, then the DREQ should be treated as if the connection had been fully established. (The RTU could be delayed, and the communication established event is processed asynchronously, so there's no way to tell for certain.) This fixes an issue where the passive side Accept() call fails waiting for the RTU, but receives a DREQ instead. Signed-off-by: Sean Hefty git-svn-id: svn://openib.tc.cornell.edu/gen1@2674 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/core/winverbs/kernel/wv_ep.c b/trunk/core/winverbs/kernel/wv_ep.c index 3ad91ac9..cb897d39 100644 --- a/trunk/core/winverbs/kernel/wv_ep.c +++ b/trunk/core/winverbs/kernel/wv_ep.c @@ -542,6 +542,10 @@ static NTSTATUS WvEpIbCmHandler(iba_cm_id *pId, iba_cm_event *pEvent) ep->State = WvEpPassiveDisconnect; WvCompleteRequests(ep->Queue, STATUS_SUCCESS); WdfObjectReleaseLock(ep->Queue); + } else if (ep->State == WvEpPassiveConnect) { + ep->State = WvEpPassiveDisconnect; + WvCompleteRequestsWithInformation(ep->Queue, STATUS_SUCCESS); + WdfObjectReleaseLock(ep->Queue); } else { WdfObjectReleaseLock(ep->Queue); WvEpCompleteDisconnect(ep, STATUS_SUCCESS);