Lines Matching refs:pIoReq

127     volatile PDRVDISKAIOREQ pIoReq;
221 PDRVDISKAIOREQ pIoReq = (PDRVDISKAIOREQ)RTMemAlloc(sizeof(DRVDISKAIOREQ));
223 if (RT_LIKELY(pIoReq))
225 pIoReq->enmTxDir = enmTxDir;
226 pIoReq->off = off;
227 pIoReq->cbTransfer = cbTransfer;
228 pIoReq->paSeg = paSeg;
229 pIoReq->cSeg = cSeg;
230 pIoReq->pvUser = pvUser;
231 pIoReq->iSlot = 0;
232 pIoReq->tsStart = RTTimeSystemMilliTS();
233 pIoReq->tsComplete = 0;
234 pIoReq->hIoLogEntry = NULL;
237 return pIoReq;
245 * @param pIoReq The I/O request to free.
247 static void drvdiskintIoReqFree(PDRVDISKINTEGRITY pThis, PDRVDISKAIOREQ pIoReq)
254 if (RT_UNLIKELY(pThis->papIoReq[i] == pIoReq))
256 RTMsgError("Request %#p completed already!\n", pIoReq);
258 pIoReq->tsStart, pIoReq->tsComplete, pIoReq->tsComplete - pIoReq->tsStart);
263 pIoReq->tsComplete = RTTimeSystemMilliTS();
265 pThis->papIoReq[pThis->iEntry] = pIoReq;
275 RTMemFree(pIoReq);
651 * @param pIoReq The request to add.
653 static void drvdiskintIoReqAdd(PDRVDISKINTEGRITY pThis, PDRVDISKAIOREQ pIoReq)
657 Assert(!pReqActive->pIoReq);
658 pReqActive->tsStart = pIoReq->tsStart;
659 pReqActive->pIoReq = pIoReq;
660 pIoReq->iSlot = pThis->iNextFreeSlot;
663 while (pThis->apReqActive[pThis->iNextFreeSlot].pIoReq)
672 * @param pIoReq The request to remove.
674 static void drvdiskintIoReqRemove(PDRVDISKINTEGRITY pThis, PDRVDISKAIOREQ pIoReq)
676 PDRVDISKAIOREQACTIVE pReqActive = &pThis->apReqActive[pIoReq->iSlot];
678 Assert(pReqActive->pIoReq == pIoReq);
680 ASMAtomicWriteNullPtr(&pReqActive->pIoReq);
710 PDRVDISKAIOREQ pIoReq = ASMAtomicReadPtrT(&pReqActive->pIoReq, PDRVDISKAIOREQ);
712 if ( pIoReq
717 pIoReq, tsCurr - pReqActive->tsStart);
731 * @param pIoReq The request to be verified.
733 static int drvdiskintReadAfterWriteVerify(PDRVDISKINTEGRITY pThis, PDRVDISKAIOREQ pIoReq)
738 rc = drvdiskintReadVerify(pThis, pIoReq->paSeg, pIoReq->cSeg, pIoReq->off, pIoReq->cbTransfer);
866 PDRVDISKAIOREQ pIoReq = drvdiskintIoReqAlloc(DRVDISKAIOTXDIR_READ, uOffset, paSeg, cSeg, cbRead, pvUser);
867 AssertPtr(pIoReq);
870 drvdiskintIoReqAdd(pThis, pIoReq);
875 cbRead, NULL, &pIoReq->hIoLogEntry);
880 cbRead, pIoReq);
896 int rc2 = VDDbgIoLogComplete(pThis->hIoLogger, pIoReq->hIoLogEntry, VINF_SUCCESS, &SgBuf);
901 drvdiskintIoReqRemove(pThis, pIoReq);
902 RTMemFree(pIoReq);
905 RTMemFree(pIoReq);
918 PDRVDISKAIOREQ pIoReq = drvdiskintIoReqAlloc(DRVDISKAIOTXDIR_WRITE, uOffset, paSeg, cSeg, cbWrite, pvUser);
919 AssertPtr(pIoReq);
922 drvdiskintIoReqAdd(pThis, pIoReq);
931 cbWrite, &SgBuf, &pIoReq->hIoLogEntry);
942 cbWrite, pIoReq);
955 int rc2 = VDDbgIoLogComplete(pThis->hIoLogger, pIoReq->hIoLogEntry, VINF_SUCCESS, NULL);
960 drvdiskintIoReqRemove(pThis, pIoReq);
962 RTMemFree(pIoReq);
965 RTMemFree(pIoReq);
976 PDRVDISKAIOREQ pIoReq = drvdiskintIoReqAlloc(DRVDISKAIOTXDIR_FLUSH, 0, NULL, 0, 0, pvUser);
977 AssertPtr(pIoReq);
980 drvdiskintIoReqAdd(pThis, pIoReq);
985 0, NULL, &pIoReq->hIoLogEntry);
989 rc = pThis->pDrvMediaAsync->pfnStartFlush(pThis->pDrvMediaAsync, pIoReq);
995 int rc2 = VDDbgIoLogComplete(pThis->hIoLogger, pIoReq->hIoLogEntry, VINF_SUCCESS, NULL);
999 RTMemFree(pIoReq);
1002 RTMemFree(pIoReq);
1014 PDRVDISKAIOREQ pIoReq = drvdiskintIoReqAlloc(DRVDISKAIOTXDIR_DISCARD, 0, NULL, 0, 0, pvUser);
1015 AssertPtr(pIoReq);
1017 pIoReq->paRanges = paRanges;
1018 pIoReq->cRanges = cRanges;
1026 rc = pThis->pDrvMediaAsync->pfnStartDiscard(pThis->pDrvMediaAsync, paRanges, cRanges, pIoReq);
1032 int rc2 = VDDbgIoLogComplete(pThis->hIoLogger, pIoReq->hIoLogEntry, VINF_SUCCESS, NULL);
1036 RTMemFree(pIoReq);
1039 RTMemFree(pIoReq);
1164 PDRVDISKAIOREQ pIoReq = (PDRVDISKAIOREQ)pvUser;
1167 LogFlowFunc(("pIoReq=%#p\n", pIoReq));
1171 drvdiskintIoReqRemove(pThis, pIoReq);
1175 if (pIoReq->enmTxDir == DRVDISKAIOTXDIR_READ)
1176 rc = drvdiskintReadVerify(pThis, pIoReq->paSeg, pIoReq->cSeg, pIoReq->off, pIoReq->cbTransfer);
1177 else if ( pIoReq->enmTxDir == DRVDISKAIOTXDIR_WRITE
1179 rc = drvdiskintWriteRecord(pThis, pIoReq->paSeg, pIoReq->cSeg, pIoReq->off, pIoReq->cbTransfer);
1180 else if (pIoReq->enmTxDir == DRVDISKAIOTXDIR_DISCARD)
1181 rc = drvdiskintDiscardRecords(pThis, pIoReq->paRanges, pIoReq->cRanges);
1182 else if (pIoReq->enmTxDir == DRVDISKAIOTXDIR_READ_AFTER_WRITE)
1183 rc = drvdiskintReadAfterWriteVerify(pThis, pIoReq);
1185 AssertMsg( pIoReq->enmTxDir == DRVDISKAIOTXDIR_FLUSH
1186 || ( pIoReq->enmTxDir == DRVDISKAIOTXDIR_WRITE
1196 if (pIoReq->enmTxDir == DRVDISKAIOTXDIR_READ)
1197 RTSgBufInit(&SgBuf, pIoReq->paSeg, pIoReq->cSeg);
1199 int rc2 = VDDbgIoLogComplete(pThis->hIoLogger, pIoReq->hIoLogEntry, rc, &SgBuf);
1204 && pIoReq->enmTxDir == DRVDISKAIOTXDIR_WRITE)
1206 pIoReq->enmTxDir = DRVDISKAIOTXDIR_READ_AFTER_WRITE;
1210 drvdiskintIoReqAdd(pThis, pIoReq);
1212 rc = pThis->pDrvMediaAsync->pfnStartRead(pThis->pDrvMediaAsync, pIoReq->off, pIoReq->paSeg, pIoReq->cSeg,
1213 pIoReq->cbTransfer, pIoReq);
1216 rc = drvdiskintReadAfterWriteVerify(pThis, pIoReq);
1219 drvdiskintIoReqRemove(pThis, pIoReq);
1220 RTMemFree(pIoReq);
1225 RTMemFree(pIoReq);
1229 void *pvUserComplete = pIoReq->pvUser;
1230 drvdiskintIoReqFree(pThis, pIoReq);
1445 pThis->apReqActive[i].pIoReq = NULL;