VirtualBox

Changeset 66486 in vbox for trunk/src/VBox/Storage/QCOW.cpp


Ignore:
Timestamp:
Apr 10, 2017 7:23:59 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114481
Message:

Storage/VD: Convert all backends to use the region list callbacks, remove the pfnGetSize and pfnGetSectorSize callbacks because they are covered by the region lists

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Storage/QCOW.cpp

    r66110 r66486  
    251251     * (can be only one at a time). */
    252252    PQCOWL2CACHEENTRY   pL2TblAlloc;
    253 
     253    /** The static region list. */
     254    VDREGIONLIST        RegionList;
    254255} QCOWIMAGE, *PQCOWIMAGE;
    255256
     
    12271228                       pImage->pszFilename);
    12281229
    1229     if (RT_FAILURE(rc))
     1230    if (RT_SUCCESS(rc))
     1231    {
     1232        PVDREGIONDESC pRegion = &pImage->RegionList.aRegions[0];
     1233        pImage->RegionList.fFlags   = 0;
     1234        pImage->RegionList.cRegions = 1;
     1235
     1236        pRegion->offRegion            = 0; /* Disk start. */
     1237        pRegion->cbBlock              = 512;
     1238        pRegion->enmDataForm          = VDREGIONDATAFORM_RAW;
     1239        pRegion->enmMetadataForm      = VDREGIONMETADATAFORM_NONE;
     1240        pRegion->cbData               = 512;
     1241        pRegion->cbMetadata           = 0;
     1242        pRegion->cRegionBlocksOrBytes = pImage->cbSize;
     1243    }
     1244    else
    12301245        qcowFreeImage(pImage, false);
    12311246    return rc;
     
    13081323        vdIfProgress(pIfProgress, uPercentStart + uPercentSpan);
    13091324
    1310     if (RT_FAILURE(rc))
     1325    if (RT_SUCCESS(rc))
     1326    {
     1327        PVDREGIONDESC pRegion = &pImage->RegionList.aRegions[0];
     1328        pImage->RegionList.fFlags   = 0;
     1329        pImage->RegionList.cRegions = 1;
     1330
     1331        pRegion->offRegion            = 0; /* Disk start. */
     1332        pRegion->cbBlock              = 512;
     1333        pRegion->enmDataForm          = VDREGIONDATAFORM_RAW;
     1334        pRegion->enmMetadataForm      = VDREGIONMETADATAFORM_NONE;
     1335        pRegion->cbData               = 512;
     1336        pRegion->cbMetadata           = 0;
     1337        pRegion->cRegionBlocksOrBytes = pImage->cbSize;
     1338    }
     1339    else
    13111340        qcowFreeImage(pImage, rc != VERR_ALREADY_EXISTS);
    13121341    return rc;
     
    15281557    AssertReturn((VALID_PTR(pszFilename) && *pszFilename), VERR_INVALID_PARAMETER);
    15291558
    1530     PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ(sizeof(QCOWIMAGE));
     1559    PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ(RT_UOFFSETOF(QCOWIMAGE, RegionList.aRegions[1]));
    15311560    if (RT_LIKELY(pImage))
    15321561    {
     
    15751604                 && VALID_PTR(pLCHSGeometry), VERR_INVALID_PARAMETER);
    15761605
    1577     PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ(sizeof(QCOWIMAGE));
     1606    PQCOWIMAGE pImage = (PQCOWIMAGE)RTMemAllocZ(RT_UOFFSETOF(QCOWIMAGE, RegionList.aRegions[1]));
    15781607    if (RT_LIKELY(pImage))
    15791608    {
     
    19181947}
    19191948
    1920 /** @copydoc VDIMAGEBACKEND::pfnGetSectorSize */
    1921 static DECLCALLBACK(uint32_t) qcowGetSectorSize(void *pBackendData)
    1922 {
    1923     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
    1924     PQCOWIMAGE pImage = (PQCOWIMAGE)pBackendData;
    1925     uint32_t cb = 0;
    1926 
    1927     AssertPtrReturn(pImage, 0);
    1928 
    1929     if (pImage->pStorage)
    1930         cb = 512;
    1931 
    1932     LogFlowFunc(("returns %u\n", cb));
    1933     return cb;
    1934 }
    1935 
    1936 /** @copydoc VDIMAGEBACKEND::pfnGetSize */
    1937 static DECLCALLBACK(uint64_t) qcowGetSize(void *pBackendData)
    1938 {
    1939     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
    1940     PQCOWIMAGE pImage = (PQCOWIMAGE)pBackendData;
    1941     uint64_t cb = 0;
    1942 
    1943     AssertPtrReturn(pImage, 0);
    1944 
    1945     if (pImage->pStorage)
    1946         cb = pImage->cbSize;
    1947 
    1948     LogFlowFunc(("returns %llu\n", cb));
    1949     return cb;
    1950 }
    1951 
    19521949/** @copydoc VDIMAGEBACKEND::pfnGetFileSize */
    19531950static DECLCALLBACK(uint64_t) qcowGetFileSize(void *pBackendData)
     
    20442041    LogFlowFunc(("returns %Rrc\n", rc));
    20452042    return rc;
     2043}
     2044
     2045/** @copydoc VDIMAGEBACKEND::pfnQueryRegions */
     2046static DECLCALLBACK(int) qcowQueryRegions(void *pBackendData, PCVDREGIONLIST *ppRegionList)
     2047{
     2048    LogFlowFunc(("pBackendData=%#p ppRegionList=%#p\n", pBackendData, ppRegionList));
     2049    PQCOWIMAGE pThis = (PQCOWIMAGE)pBackendData;
     2050
     2051    AssertPtrReturn(pThis, VERR_VD_NOT_OPENED);
     2052
     2053    *ppRegionList = &pThis->RegionList;
     2054    LogFlowFunc(("returns %Rrc\n", VINF_SUCCESS));
     2055    return VINF_SUCCESS;
     2056}
     2057
     2058/** @copydoc VDIMAGEBACKEND::pfnRegionListRelease */
     2059static DECLCALLBACK(void) qcowRegionListRelease(void *pBackendData, PCVDREGIONLIST pRegionList)
     2060{
     2061    RT_NOREF1(pRegionList);
     2062    LogFlowFunc(("pBackendData=%#p pRegionList=%#p\n", pBackendData, pRegionList));
     2063    PQCOWIMAGE pThis = (PQCOWIMAGE)pBackendData;
     2064    AssertPtr(pThis); RT_NOREF(pThis);
     2065
     2066    /* Nothing to do here. */
    20462067}
    20472068
     
    23692390    /* pfnGetVersion */
    23702391    qcowGetVersion,
    2371     /* pfnGetSectorSize */
    2372     qcowGetSectorSize,
    2373     /* pfnGetSize */
    2374     qcowGetSize,
    23752392    /* pfnGetFileSize */
    23762393    qcowGetFileSize,
     
    23842401    qcowSetLCHSGeometry,
    23852402    /* pfnQueryRegions */
    2386     NULL,
     2403    qcowQueryRegions,
    23872404    /* pfnRegionListRelease */
    2388     NULL,
     2405    qcowRegionListRelease,
    23892406    /* pfnGetImageFlags */
    23902407    qcowGetImageFlags,
Note: See TracChangeset for help on using the changeset viewer.

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