VirtualBox

Changeset 63740 in vbox


Ignore:
Timestamp:
Sep 6, 2016 2:20:14 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
110522
Message:

DrvVD: Don't use the async VD API in PDMIMEDIAEX when it is not supported

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DrvVD.cpp

    r63723 r63740  
    30463046
    30473047        if (pIoReq->enmType == PDMMEDIAEXIOREQTYPE_READ)
    3048             rc = VDAsyncRead(pThis->pDisk, pIoReq->ReadWrite.offStart, cbReqIo, &pIoReq->ReadWrite.IoBuf.SgBuf,
    3049                              drvvdMediaExIoReqComplete, pThis, pIoReq);
     3048        {
     3049            if (pThis->fAsyncIOSupported)
     3050                rc = VDAsyncRead(pThis->pDisk, pIoReq->ReadWrite.offStart, cbReqIo, &pIoReq->ReadWrite.IoBuf.SgBuf,
     3051                                 drvvdMediaExIoReqComplete, pThis, pIoReq);
     3052            else
     3053            {
     3054                void *pvBuf = RTSgBufGetNextSegment(&pIoReq->ReadWrite.IoBuf.SgBuf, &cbReqIo);
     3055
     3056                Assert(cbReqIo > 0 && VALID_PTR(pvBuf));
     3057                rc = VDRead(pThis->pDisk, pIoReq->ReadWrite.offStart, pvBuf, cbReqIo);
     3058                if (RT_SUCCESS(rc))
     3059                    rc = VINF_VD_ASYNC_IO_FINISHED;
     3060            }
     3061        }
    30503062        else
    30513063        {
     
    30543066            if (RT_SUCCESS(rc))
    30553067            {
    3056                 rc = VDAsyncWrite(pThis->pDisk, pIoReq->ReadWrite.offStart, cbReqIo,
    3057                                   &pIoReq->ReadWrite.IoBuf.SgBuf,
    3058                                   drvvdMediaExIoReqComplete, pThis, pIoReq);
     3068                if (pThis->fAsyncIOSupported)
     3069                    rc = VDAsyncWrite(pThis->pDisk, pIoReq->ReadWrite.offStart, cbReqIo,
     3070                                      &pIoReq->ReadWrite.IoBuf.SgBuf,
     3071                                      drvvdMediaExIoReqComplete, pThis, pIoReq);
     3072                else
     3073                {
     3074                    void *pvBuf = RTSgBufGetNextSegment(&pIoReq->ReadWrite.IoBuf.SgBuf, &cbReqIo);
     3075
     3076                    Assert(cbReqIo > 0 && VALID_PTR(pvBuf));
     3077                    rc = VDWrite(pThis->pDisk, pIoReq->ReadWrite.offStart, pvBuf, cbReqIo);
     3078                    if (RT_SUCCESS(rc))
     3079                        rc = VINF_VD_ASYNC_IO_FINISHED;
     3080                }
    30593081            }
    30603082        }
     
    34533475
    34543476    ASMAtomicIncU32(&pThis->cIoReqsActive);
    3455     int rc = VDAsyncFlush(pThis->pDisk, drvvdMediaExIoReqComplete, pThis, pIoReq);
     3477    int rc = VINF_SUCCESS;
     3478    if (pThis->fAsyncIOSupported)
     3479        rc = VDAsyncFlush(pThis->pDisk, drvvdMediaExIoReqComplete, pThis, pIoReq);
     3480    else
     3481        rc = VDFlush(pThis->pDisk);
     3482
    34563483    if (rc == VERR_VD_ASYNC_IO_IN_PROGRESS)
    34573484        rc = VINF_PDM_MEDIAEX_IOREQ_IN_PROGRESS;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette