Ticket #16677: pdm_async_completion_incomplete_req.patch
| File pdm_async_completion_incomplete_req.patch, 3.3 KB (added by , 7 years ago) |
|---|
-
src/VBox/VMM/include/PDMAsyncCompletionFileInternal.h
483 483 PDMACTASKFILETRANSFER enmTransferType; 484 484 /** Start offset */ 485 485 RTFOFF Off; 486 /** Amount of data transfered so far. */ 487 size_t cbTransfered; 486 488 /** Data segment. */ 487 489 RTSGSEG DataSeg; 488 490 /** When non-zero the segment uses a bounce buffer because the provided buffer -
src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp
1464 1464 * but to get the cause of the error (disk full, file too big, I/O error, ...) 1465 1465 * the transfer needs to be continued. 1466 1466 */ 1467 if (RT_UNLIKELY( cbTransfered < pTask->DataSeg.cbSeg 1467 pTask->cbTransfered += cbTransfered; 1468 1469 if (RT_UNLIKELY( pTask->cbTransfered < pTask->DataSeg.cbSeg 1468 1470 || ( pTask->cbBounceBuffer 1469 && cbTransfered < pTask->cbBounceBuffer)))1471 && pTask->cbTransfered < pTask->cbBounceBuffer))) 1470 1472 { 1471 1473 RTFOFF offStart; 1472 1474 size_t cbToTransfer; … … 1479 1481 if (pTask->cbBounceBuffer) 1480 1482 { 1481 1483 AssertPtr(pTask->pvBounceBuffer); 1482 offStart = (pTask->Off & ~((RTFOFF)512-1)) + cbTransfered;1483 cbToTransfer = pTask->cbBounceBuffer - cbTransfered;1484 pbBuf = (uint8_t *)pTask->pvBounceBuffer + cbTransfered;1484 offStart = (pTask->Off & ~((RTFOFF)512-1)) + pTask->cbTransfered; 1485 cbToTransfer = pTask->cbBounceBuffer - pTask->cbTransfered; 1486 pbBuf = (uint8_t *)pTask->pvBounceBuffer + pTask->cbTransfered; 1485 1487 } 1486 1488 else 1487 1489 { 1488 1490 Assert(!pTask->pvBounceBuffer); 1489 offStart = pTask->Off + cbTransfered;1490 cbToTransfer = pTask->DataSeg.cbSeg - cbTransfered;1491 pbBuf = (uint8_t *)pTask->DataSeg.pvSeg + cbTransfered;1491 offStart = pTask->Off + pTask->cbTransfered; 1492 cbToTransfer = pTask->DataSeg.cbSeg - pTask->cbTransfered; 1493 pbBuf = (uint8_t *)pTask->DataSeg.pvSeg + pTask->cbTransfered; 1492 1494 } 1493 1495 1494 1496 if (pTask->fPrefetch || pTask->enmTransferType == PDMACTASKFILETRANSFER_READ) … … 1524 1526 RTFOFF offStart = pTask->Off & ~(RTFOFF)(512-1); 1525 1527 size_t cbToTransfer = RT_ALIGN_Z(pTask->DataSeg.cbSeg + (pTask->Off - offStart), 512); 1526 1528 1529 pTask->cbTransfered = 0; 1530 1527 1531 /* Grow the file if needed. */ 1528 1532 if (RT_UNLIKELY((uint64_t)(pTask->Off + pTask->DataSeg.cbSeg) > pEndpoint->cbFile)) 1529 1533 {

