Changeset 66263 in vbox for trunk/src/VBox/Storage
- Timestamp:
- Mar 27, 2017 11:11:41 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114184
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Storage/testcase/tstVDIo.cpp
r66251 r66263 159 159 * Transfer direction. 160 160 */ 161 typedef enum VDIOREQTXDIR162 { 163 VDIOREQTXDIR_READ = 0,164 VDIOREQTXDIR_WRITE,165 VDIOREQTXDIR_FLUSH,166 VDIOREQTXDIR_DISCARD167 } VDIOREQTXDIR;161 typedef enum TSTVDIOREQTXDIR 162 { 163 TSTVDIOREQTXDIR_READ = 0, 164 TSTVDIOREQTXDIR_WRITE, 165 TSTVDIOREQTXDIR_FLUSH, 166 TSTVDIOREQTXDIR_DISCARD 167 } TSTVDIOREQTXDIR; 168 168 169 169 /** 170 170 * I/O request. 171 171 */ 172 typedef struct VDIOREQ172 typedef struct TSTVDIOREQ 173 173 { 174 174 /** Transfer type. */ 175 VDIOREQTXDIR enmTxDir;175 TSTVDIOREQTXDIR enmTxDir; 176 176 /** slot index. */ 177 unsigned idx;177 unsigned idx; 178 178 /** Start offset. */ 179 uint64_t off;179 uint64_t off; 180 180 /** Size to transfer. */ 181 size_t cbReq;181 size_t cbReq; 182 182 /** S/G Buffer */ 183 RTSGBUF SgBuf;183 RTSGBUF SgBuf; 184 184 /** Flag whether the request is outstanding or not. */ 185 volatile bool fOutstanding;185 volatile bool fOutstanding; 186 186 /** Buffer to use for reads. */ 187 void *pvBufRead;187 void *pvBufRead; 188 188 /** Contiguous buffer pointer backing the segments. */ 189 void *pvBuf;189 void *pvBuf; 190 190 /** Opaque user data. */ 191 void *pvUser;191 void *pvUser; 192 192 /** Number of segments used for the data buffer. */ 193 uint32_t cSegs;193 uint32_t cSegs; 194 194 /** Array of data segments. */ 195 RTSGSEG aSegs[10];196 } VDIOREQ, *PVDIOREQ;195 RTSGSEG aSegs[10]; 196 } TSTVDIOREQ, *PTSTVDIOREQ; 197 197 198 198 /** … … 543 543 static bool tstVDIoTestRunning(PVDIOTEST pIoTest); 544 544 static void tstVDIoTestDestroy(PVDIOTEST pIoTest); 545 static bool tstVDIoTestReqOutstanding(P VDIOREQ pIoReq);546 static int tstVDIoTestReqInit(PVDIOTEST pIoTest, P VDIOREQ pIoReq, void *pvUser);545 static bool tstVDIoTestReqOutstanding(PTSTVDIOREQ pIoReq); 546 static int tstVDIoTestReqInit(PVDIOTEST pIoTest, PTSTVDIOREQ pIoReq, void *pvUser); 547 547 static DECLCALLBACK(void) tstVDIoTestReqComplete(void *pvUser1, void *pvUser2, int rcReq); 548 548 … … 765 765 if (RT_SUCCESS(rc)) 766 766 { 767 P VDIOREQ paIoReq = NULL;767 PTSTVDIOREQ paIoReq = NULL; 768 768 unsigned cMaxTasksOutstanding = fAsync ? cMaxReqs : 1; 769 769 RTSEMEVENT EventSem; 770 770 771 771 rc = RTSemEventCreate(&EventSem); 772 paIoReq = (P VDIOREQ)RTMemAllocZ(cMaxTasksOutstanding * sizeof(VDIOREQ));772 paIoReq = (PTSTVDIOREQ)RTMemAllocZ(cMaxTasksOutstanding * sizeof(TSTVDIOREQ)); 773 773 if (paIoReq && RT_SUCCESS(rc)) 774 774 { … … 808 808 switch (paIoReq[idx].enmTxDir) 809 809 { 810 case VDIOREQTXDIR_READ:810 case TSTVDIOREQTXDIR_READ: 811 811 { 812 812 rc = VDRead(pDisk->pVD, paIoReq[idx].off, paIoReq[idx].aSegs[0].pvSeg, paIoReq[idx].cbReq); … … 826 826 break; 827 827 } 828 case VDIOREQTXDIR_WRITE:828 case TSTVDIOREQTXDIR_WRITE: 829 829 { 830 830 rc = VDWrite(pDisk->pVD, paIoReq[idx].off, paIoReq[idx].aSegs[0].pvSeg, paIoReq[idx].cbReq); … … 839 839 break; 840 840 } 841 case VDIOREQTXDIR_FLUSH:841 case TSTVDIOREQTXDIR_FLUSH: 842 842 { 843 843 rc = VDFlush(pDisk->pVD); 844 844 break; 845 845 } 846 case VDIOREQTXDIR_DISCARD:846 case TSTVDIOREQTXDIR_DISCARD: 847 847 AssertMsgFailed(("Invalid\n")); 848 848 } … … 857 857 switch (paIoReq[idx].enmTxDir) 858 858 { 859 case VDIOREQTXDIR_READ:859 case TSTVDIOREQTXDIR_READ: 860 860 { 861 861 rc = VDAsyncRead(pDisk->pVD, paIoReq[idx].off, paIoReq[idx].cbReq, &paIoReq[idx].SgBuf, … … 863 863 break; 864 864 } 865 case VDIOREQTXDIR_WRITE:865 case TSTVDIOREQTXDIR_WRITE: 866 866 { 867 867 rc = VDAsyncWrite(pDisk->pVD, paIoReq[idx].off, paIoReq[idx].cbReq, &paIoReq[idx].SgBuf, … … 869 869 break; 870 870 } 871 case VDIOREQTXDIR_FLUSH:871 case TSTVDIOREQTXDIR_FLUSH: 872 872 { 873 873 rc = VDAsyncFlush(pDisk->pVD, tstVDIoTestReqComplete, &paIoReq[idx], EventSem); 874 874 break; 875 875 } 876 case VDIOREQTXDIR_DISCARD:876 case TSTVDIOREQTXDIR_DISCARD: 877 877 AssertMsgFailed(("Invalid\n")); 878 878 } … … 889 889 switch (paIoReq[idx].enmTxDir) 890 890 { 891 case VDIOREQTXDIR_READ:891 case TSTVDIOREQTXDIR_READ: 892 892 { 893 893 if (pDisk->pMemDiskVerify) … … 906 906 break; 907 907 } 908 case VDIOREQTXDIR_WRITE:908 case TSTVDIOREQTXDIR_WRITE: 909 909 { 910 910 if (pDisk->pMemDiskVerify) … … 919 919 break; 920 920 } 921 case VDIOREQTXDIR_FLUSH:921 case TSTVDIOREQTXDIR_FLUSH: 922 922 break; 923 case VDIOREQTXDIR_DISCARD:923 case TSTVDIOREQTXDIR_DISCARD: 924 924 AssertMsgFailed(("Invalid\n")); 925 925 } … … 1016 1016 else if (fAsync) 1017 1017 { 1018 VDIOREQ IoReq;1018 TSTVDIOREQ IoReq; 1019 1019 RTSEMEVENT EventSem; 1020 1020 … … 1022 1022 if (RT_SUCCESS(rc)) 1023 1023 { 1024 memset(&IoReq, 0, sizeof( VDIOREQ));1025 IoReq.enmTxDir = VDIOREQTXDIR_FLUSH;1024 memset(&IoReq, 0, sizeof(TSTVDIOREQ)); 1025 IoReq.enmTxDir = TSTVDIOREQTXDIR_FLUSH; 1026 1026 IoReq.pvUser = pDisk; 1027 1027 IoReq.idx = 0; … … 1247 1247 else 1248 1248 { 1249 VDIOREQ IoReq;1249 TSTVDIOREQ IoReq; 1250 1250 RTSEMEVENT EventSem; 1251 1251 … … 1253 1253 if (RT_SUCCESS(rc)) 1254 1254 { 1255 memset(&IoReq, 0, sizeof( VDIOREQ));1256 IoReq.enmTxDir = VDIOREQTXDIR_FLUSH;1255 memset(&IoReq, 0, sizeof(TSTVDIOREQ)); 1256 IoReq.enmTxDir = TSTVDIOREQTXDIR_FLUSH; 1257 1257 IoReq.pvUser = pDisk; 1258 1258 IoReq.idx = 0; … … 2426 2426 } 2427 2427 2428 static bool tstVDIoTestReqOutstanding(P VDIOREQ pIoReq)2428 static bool tstVDIoTestReqOutstanding(PTSTVDIOREQ pIoReq) 2429 2429 { 2430 2430 return pIoReq->fOutstanding; … … 2474 2474 } 2475 2475 2476 static int tstVDIoTestReqInit(PVDIOTEST pIoTest, P VDIOREQ pIoReq, void *pvUser)2476 static int tstVDIoTestReqInit(PVDIOTEST pIoTest, PTSTVDIOREQ pIoReq, void *pvUser) 2477 2477 { 2478 2478 int rc = VINF_SUCCESS; … … 2481 2481 { 2482 2482 /* Read or Write? */ 2483 pIoReq->enmTxDir = tstVDIoTestIsTrue(pIoTest, pIoTest->uWriteChance) ? VDIOREQTXDIR_WRITE :VDIOREQTXDIR_READ;2483 pIoReq->enmTxDir = tstVDIoTestIsTrue(pIoTest, pIoTest->uWriteChance) ? TSTVDIOREQTXDIR_WRITE : TSTVDIOREQTXDIR_READ; 2484 2484 pIoReq->cbReq = RT_MIN(pIoTest->cbBlkIo, pIoTest->cbIo); 2485 2485 pIoTest->cbIo -= pIoReq->cbReq; … … 2487 2487 void *pvBuf = NULL; 2488 2488 2489 if (pIoReq->enmTxDir == VDIOREQTXDIR_WRITE)2489 if (pIoReq->enmTxDir == TSTVDIOREQTXDIR_WRITE) 2490 2490 { 2491 2491 if (pIoTest->pPattern) … … 2575 2575 { 2576 2576 RT_NOREF1(rcReq); 2577 P VDIOREQ pIoReq = (PVDIOREQ)pvUser1;2577 PTSTVDIOREQ pIoReq = (PTSTVDIOREQ)pvUser1; 2578 2578 RTSEMEVENT hEventSem = (RTSEMEVENT)pvUser2; 2579 2579 PVDDISK pDisk = (PVDDISK)pIoReq->pvUser; … … 2585 2585 switch (pIoReq->enmTxDir) 2586 2586 { 2587 case VDIOREQTXDIR_READ:2587 case TSTVDIOREQTXDIR_READ: 2588 2588 { 2589 2589 RTCritSectEnter(&pDisk->CritSectVerify); … … 2601 2601 break; 2602 2602 } 2603 case VDIOREQTXDIR_WRITE:2603 case TSTVDIOREQTXDIR_WRITE: 2604 2604 { 2605 2605 RTCritSectEnter(&pDisk->CritSectVerify); … … 2617 2617 break; 2618 2618 } 2619 case VDIOREQTXDIR_FLUSH:2620 case VDIOREQTXDIR_DISCARD:2619 case TSTVDIOREQTXDIR_FLUSH: 2620 case TSTVDIOREQTXDIR_DISCARD: 2621 2621 break; 2622 2622 }
Note:
See TracChangeset
for help on using the changeset viewer.