goto err;\r
}\r
\r
+ WvDeviceGet(pDevice);\r
pd->pDevice = pDevice;\r
pd->pVerbs = pDevice->pVerbs;\r
*ppPd = pd;\r
InsertHeadList(&dev->PdList, &pd->Entry);\r
KeReleaseGuardedMutex(&pProvider->Lock);\r
\r
- WvProviderEnableRemove(pProvider);\r
+ WvDeviceRelease(dev);\r
outid->VerbInfo = verbsData.status;\r
WdfRequestCompleteWithInformation(Request, status, outlen);\r
return;\r
goto err2;\r
}\r
\r
+ WvPdGet(pd);\r
+ mw->pPd = pd;\r
+\r
WvInitVerbsData(&verbsData, inid->VerbInfo, inlen - sizeof(WV_IO_ID),\r
outlen - sizeof(WV_IO_ID), inid + 1);\r
ib_status = pd->pVerbs->create_mw(pd->hVerbsPd, &outid->Data, &mw->hVerbsMw,\r
outid->Id = IndexListInsertHead(&pProvider->MwIndex, mw);\r
if (outid->Id == 0) {\r
status = STATUS_NO_MEMORY;\r
- goto err3;\r
+ goto err4;\r
}\r
InsertHeadList(&pd->MwList, &mw->Entry);\r
KeReleaseGuardedMutex(&pProvider->Lock);\r
\r
- mw->pPd = pd;\r
-\r
- WvProviderEnableRemove(pProvider);\r
+ WvPdRelease(pd);\r
outid->VerbInfo = verbsData.status;\r
WdfRequestCompleteWithInformation(Request, status, outlen);\r
return;\r
\r
-err3:\r
+err4:\r
KeReleaseGuardedMutex(&pProvider->Lock);\r
+err3:\r
WvMwFree(mw);\r
err2:\r
WvPdRelease(pd);\r
goto err2;\r
}\r
\r
+ WvPdGet(pd);\r
+ ah->pPd = pd;\r
+\r
WvVerbsConvertAv(&av, &pinAv->AddressVector);\r
WvInitVerbsData(&verbsData, pinAv->Id.VerbInfo, inlen - sizeof(WV_IO_AH_CREATE),\r
outlen - sizeof(WV_IO_AH_CREATE), pinAv + 1);\r
poutAv->Id.Id = IndexListInsertHead(&pProvider->AhIndex, ah);\r
if (poutAv->Id.Id == 0) {\r
status = STATUS_NO_MEMORY;\r
- goto err3;\r
+ goto err4;\r
}\r
InsertHeadList(&pd->AhList, &ah->Entry);\r
KeReleaseGuardedMutex(&pProvider->Lock);\r
\r
- ah->pPd = pd;\r
-\r
- WvProviderEnableRemove(pProvider);\r
+ WvPdRelease(pd);\r
poutAv->Id.VerbInfo = verbsData.status;\r
WdfRequestCompleteWithInformation(Request, status, outlen);\r
return;\r
\r
-err3:\r
+err4:\r
KeReleaseGuardedMutex(&pProvider->Lock);\r
+err3:\r
WvAhFree(ah);\r
err2:\r
WvPdRelease(pd);\r
if (mc->hVerbsMc != NULL) {\r
pQp->pVerbs->detach_mcast(mc->hVerbsMc);\r
}\r
- WvQpPut(pQp);\r
ExFreePool(mc);\r
}\r
\r
InsertHeadList(&qp->McList, &pmc->Entry);\r
KeReleaseGuardedMutex(&qp->pPd->Lock);\r
\r
- WvProviderEnableRemove(pProvider);\r
+ WvQpRelease(qp);\r
WdfRequestComplete(Request, STATUS_SUCCESS);\r
return;\r
\r
if (pmc->hVerbsMc != NULL) {\r
qp->pVerbs->detach_mcast(pmc->hVerbsMc);\r
}\r
- WvQpPut(qp);\r
- WvQpRelease(qp);\r
\r
ExFreePool(pmc);\r
status = STATUS_SUCCESS;\r
- goto complete;\r
+ goto release;\r
}\r
}\r
KeReleaseGuardedMutex(&qp->pPd->Lock);\r
- WvQpRelease(qp);\r
status = STATUS_NOT_FOUND;\r
\r
+release:\r
+ WvQpRelease(qp);\r
complete:\r
WdfRequestComplete(Request, status);\r
}\r
goto err2;\r
}\r
\r
+ WvPdGet(pPd);\r
srq->pPd = pPd;\r
srq->pProvider = pPd->pDevice->pProvider;\r
srq->pVerbs = pPd->pVerbs;\r
InsertHeadList(&pd->SrqList, &srq->Entry);\r
KeReleaseGuardedMutex(&pProvider->Lock);\r
\r
- WvProviderEnableRemove(pProvider);\r
+ WvPdRelease(pd);\r
outAttr->Id.VerbInfo = verbsData.status;\r
WdfRequestCompleteWithInformation(Request, status, outlen);\r
return;\r