VirtualBox

Changeset 15591 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Dec 16, 2008 2:46:08 PM (16 years ago)
Author:
vboxsync
Message:

Storage/VBoxHDD-new: introduce parent UUID parameter for VDCreateDiff. Makes creation of iSCSI snapshots easier.

Location:
trunk/src/VBox
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/VBoxHDD-new.cpp

    r15577 r15591  
    14201420 * @param   pszComment      Pointer to image comment. NULL is ok.
    14211421 * @param   pUuid           New UUID of the image. If NULL, a new UUID is created.
     1422 * @param   pParentUuid     New parent UUID of the image. If NULL, the UUID is queried automatically.
    14221423 * @param   uOpenFlags      Image file open mode, see VD_OPEN_FLAGS_* constants.
    14231424 * @param   pVDIfsImage     Pointer to the per-image VD interface list.
     
    14271428                               const char *pszFilename, unsigned uImageFlags,
    14281429                               const char *pszComment, PCRTUUID pUuid,
    1429                                unsigned uOpenFlags, PVDINTERFACE pVDIfsImage,
     1430                               PCRTUUID pParentUuid, unsigned uOpenFlags,
     1431                               PVDINTERFACE pVDIfsImage,
    14301432                               PVDINTERFACE pVDIfsOperation)
    14311433{
     
    14341436    RTUUID uuid;
    14351437
    1436     LogFlowFunc(("pDisk=%#p pszBackend=\"%s\" pszFilename=\"%s\" uImageFlags=%#x pszComment=\"%s\" Uuid=%RTuuid uOpenFlags=%#x pVDIfsImage=%#p pVDIfsOperation=%#p\n",
    1437                  pDisk, pszBackend, pszFilename, uImageFlags, pszComment, pUuid, uOpenFlags,
     1438    LogFlowFunc(("pDisk=%#p pszBackend=\"%s\" pszFilename=\"%s\" uImageFlags=%#x pszComment=\"%s\" Uuid=%RTuuid ParentUuid=%RTuuid uOpenFlags=%#x pVDIfsImage=%#p pVDIfsOperation=%#p\n",
     1439                 pDisk, pszBackend, pszFilename, uImageFlags, pszComment, pUuid, pParentUuid, uOpenFlags,
    14381440                 pVDIfsImage, pVDIfsOperation));
    14391441
     
    14631465        AssertMsgBreakStmt(pUuid == NULL || VALID_PTR(pUuid),
    14641466                           ("pUuid=%#p UUID=%RTuuid\n", pUuid, pUuid),
     1467                           rc = VERR_INVALID_PARAMETER);
     1468        /* The parent UUID may be NULL. */
     1469        AssertMsgBreakStmt(pParentUuid == NULL || VALID_PTR(pParentUuid),
     1470                           ("pParentUuid=%#p ParentUUID=%RTuuid\n", pParentUuid, pParentUuid),
    14651471                           rc = VERR_INVALID_PARAMETER);
    14661472        AssertMsgBreakStmt((uOpenFlags & ~VD_OPEN_FLAGS_MASK) == 0,
     
    15441550            int rc2;
    15451551
    1546             rc2 = pDisk->pLast->Backend->pfnGetUuid(pDisk->pLast->pvBackendData,
    1547                                                     &Uuid);
    1548             if (RT_SUCCESS(rc2))
     1552            if (pParentUuid && !RTUuidIsNull(pParentUuid))
     1553            {
     1554                Uuid = *pParentUuid;
    15491555                pImage->Backend->pfnSetParentUuid(pImage->pvBackendData, &Uuid);
     1556            }
     1557            else
     1558            {
     1559                rc2 = pDisk->pLast->Backend->pfnGetUuid(pDisk->pLast->pvBackendData,
     1560                                                        &Uuid);
     1561                if (RT_SUCCESS(rc2))
     1562                    pImage->Backend->pfnSetParentUuid(pImage->pvBackendData, &Uuid);
     1563            }
    15501564            rc2 = pDisk->pLast->Backend->pfnGetModificationUuid(pDisk->pLast->pvBackendData,
    15511565                                                                &Uuid);
     
    15541568                                                              &Uuid);
    15551569            rc2 = pDisk->pLast->Backend->pfnGetTimeStamp(pDisk->pLast->pvBackendData,
    1556                                                              &ts);
     1570                                                         &ts);
    15571571            if (RT_SUCCESS(rc2))
    15581572                pImage->Backend->pfnSetParentTimeStamp(pImage->pvBackendData, &ts);
     
    20002014        {
    20012015            rc = VDCreateDiff(pDiskTo, pszBackend, pszFilename, uImageFlagsFrom,
    2002                               szComment, &ImageUuid, uOpenFlagsFrom & ~VD_OPEN_FLAGS_READONLY, NULL, NULL);
     2016                              szComment, &ImageUuid, &ParentUuid, uOpenFlagsFrom & ~VD_OPEN_FLAGS_READONLY, NULL, NULL);
    20032017        } else {
    20042018            rc = VDCreateBase(pDiskTo, pszBackend, pszFilename, enmTypeFrom,
     
    20082022            if (RT_SUCCESS(rc) && !RTUuidIsNull(&ImageUuid))
    20092023                 pDiskTo->pLast->Backend->pfnSetUuid(pDiskTo->pLast->pvBackendData, &ImageUuid);
     2024            if (RT_SUCCESS(rc) && !RTUuidIsNull(&ParentUuid))
     2025                 pDiskTo->pLast->Backend->pfnSetParentUuid(pDiskTo->pLast->pvBackendData, &ParentUuid);
    20102026        }
    20112027        if (RT_FAILURE(rc))
     
    20652081        {
    20662082            pImageTo->Backend->pfnSetModificationUuid(pImageTo->pvBackendData, &ImageModificationUuid);
    2067             pImageTo->Backend->pfnGetParentUuid(pImageTo->pvBackendData, &ParentUuid);
    20682083            pImageTo->Backend->pfnGetParentModificationUuid(pImageTo->pvBackendData, &ParentModificationUuid);
    20692084        }
  • trunk/src/VBox/Devices/Storage/testcase/tstVD.cpp

    r15529 r15591  
    582582
    583583    rc = VDCreateDiff(pVD, pszBackend, pszDiffFilename,
    584                       VD_IMAGE_FLAGS_NONE, "Test diff image", NULL,
     584                      VD_IMAGE_FLAGS_NONE, "Test diff image", NULL, NULL,
    585585                      VD_OPEN_FLAGS_NORMAL, NULL, NULL);
    586586    CHECK("VDCreateDiff()");
  • trunk/src/VBox/Main/HardDisk2Impl.cpp

    r15568 r15591  
    33713371
    33723372            /* The object may request a specific UUID (through a special form of
    3373              * the setLocation() argumet). Otherwise we have to generate it */
     3373             * the setLocation() argument). Otherwise we have to generate it */
    33743374            Guid targetId = target->m.id;
    33753375            bool generateUuid = targetId.isEmpty();
     
    34263426                                        VD_IMAGE_FLAGS_NONE,
    34273427                                        NULL, targetId.raw(),
     3428                                        NULL /******/,
    34283429                                        VD_OPEN_FLAGS_NORMAL,
    34293430                                        target->mm.vdDiskIfaces,
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