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 <[email protected]>
---
 trunk/core/winverbs/kernel/wv_ep.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/trunk/core/winverbs/kernel/wv_ep.c 
b/trunk/core/winverbs/kernel/wv_ep.c
index e35e6e8..f7394dc 100644
--- a/trunk/core/winverbs/kernel/wv_ep.c
+++ b/trunk/core/winverbs/kernel/wv_ep.c
@@ -518,7 +518,7 @@ static NTSTATUS WvEpIbCmHandler(iba_cm_id *pId, 
iba_cm_event *pEvent)
                WdfObjectReleaseLock(ep->Queue);
                break;
        case iba_cm_dreq_error:
-               WvEpCompleteDisconnect(ep, STATUS_IO_TIMEOUT);
+               WvEpCompleteDisconnect(ep, STATUS_TIMEOUT);
                break;
        case iba_cm_rep_received:
                WdfObjectAcquireLock(ep->Queue);
@@ -1046,6 +1046,7 @@ void WvEpDisconnect(WV_PROVIDER *pProvider, WDFREQUEST 
Request)
                        }
                }
                /* Fall through to passive disconnect case on failure */
+       case WvEpActiveDisconnect:
        case WvEpPassiveDisconnect:
                ep->State = WvEpDisconnected;
                WdfObjectReleaseLock(ep->Queue);


_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to