]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[WINVERBS] winverbs/ep: allow failed connection requests to be retried
authorStan Smith <stan.smith@intel.com>
Wed, 10 Mar 2010 22:19:37 +0000 (22:19 +0000)
committerStan Smith <stan.smith@intel.com>
Wed, 10 Mar 2010 22:19:37 +0000 (22:19 +0000)
Allow a user to retry a connection request if it fails.  Report a
'success' timeout value, rather than an error timeout, reset the
EP state, and allow the request to be retried from user space.

winverbs: allow WV:Disconnect() to be retried

ND for some odd reason wants a successful return code for
a failed disconnect call.  If a Disconnect() call fails,
allow it to be retried.  Return STATUS_TIMEOUT - a 'successful'
failure, rather than STATUS_IO_TIMEOUT, which is a 'failed' failure.
(I love Windows, really, I do.)  A subsequent call to EP:
Disconnect() after a timeout will force the QP into the error
state and force the EP into the disconnected state.

This change is needed to prevent ndping and other ND tests from
reporting a failure.  They only allow disconnect calls to fail
'successfully' with STATUS_TIMEOUT.  With the status mapping
removed from the user space WV ND library, we need to return the
desired value directly from the kernel.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1@2728 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/WOF2-2/core/winverbs/kernel/wv_ep.c

index cb897d39cf98f03dae0f5922516693e0a094b8a2..f7394dc2455483d14de922de7e805ef136686307 100644 (file)
@@ -504,8 +504,8 @@ static NTSTATUS WvEpIbCmHandler(iba_cm_id *pId, iba_cm_event *pEvent)
        case iba_cm_req_error:\r
                WdfObjectAcquireLock(ep->Queue);\r
                if (ep->State == WvEpActiveConnect) {\r
-                       ep->State = WvEpDisconnected;\r
-                       WvCompleteRequests(ep->Queue, STATUS_IO_TIMEOUT);\r
+                       ep->State = WvEpRouteResolved;\r
+                       WvCompleteRequests(ep->Queue, STATUS_TIMEOUT);\r
                }\r
                WdfObjectReleaseLock(ep->Queue);\r
                break;\r
@@ -518,7 +518,7 @@ static NTSTATUS WvEpIbCmHandler(iba_cm_id *pId, iba_cm_event *pEvent)
                WdfObjectReleaseLock(ep->Queue);\r
                break;\r
        case iba_cm_dreq_error:\r
-               WvEpCompleteDisconnect(ep, STATUS_IO_TIMEOUT);\r
+               WvEpCompleteDisconnect(ep, STATUS_TIMEOUT);\r
                break;\r
        case iba_cm_rep_received:\r
                WdfObjectAcquireLock(ep->Queue);\r
@@ -1046,6 +1046,7 @@ void WvEpDisconnect(WV_PROVIDER *pProvider, WDFREQUEST Request)
                        }\r
                }\r
                /* Fall through to passive disconnect case on failure */\r
+       case WvEpActiveDisconnect:\r
        case WvEpPassiveDisconnect:\r
                ep->State = WvEpDisconnected;\r
                WdfObjectReleaseLock(ep->Queue);\r