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
