Changeset 90809 in vbox for trunk/src/VBox
- Timestamp:
- Aug 23, 2021 7:41:34 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Storage/VD.cpp
r90808 r90809 8971 8971 AssertPtrReturn(pBackendInfo, VERR_INVALID_POINTER); 8972 8972 8973 /* Do the job. */ 8973 8974 int rc2 = vdThreadStartRead(pDisk); 8974 8975 AssertRC(rc2); … … 8997 8998 unsigned *puImageFlags) 8998 8999 { 8999 int rc = VINF_SUCCESS;9000 int rc2;9001 bool fLockRead = false;9002 9003 9000 LogFlowFunc(("pDisk=%#p nImage=%u puImageFlags=%#p\n", 9004 9001 pDisk, nImage, puImageFlags)); 9005 do 9006 { 9007 /* sanity check */ 9008 AssertPtrBreakStmt(pDisk, rc = VERR_INVALID_PARAMETER); 9009 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9010 9011 /* Check arguments. */ 9012 AssertMsgBreakStmt(VALID_PTR(puImageFlags), 9013 ("puImageFlags=%#p\n", puImageFlags), 9014 rc = VERR_INVALID_PARAMETER); 9015 9016 rc2 = vdThreadStartRead(pDisk); 9017 AssertRC(rc2); 9018 fLockRead = true; 9019 9020 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9021 AssertPtrBreakStmt(pImage, rc = VERR_VD_IMAGE_NOT_FOUND); 9022 9002 /* sanity check */ 9003 AssertPtrReturn(pDisk, VERR_INVALID_POINTER); 9004 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9005 9006 /* Check arguments. */ 9007 AssertPtrReturn(puImageFlags, VERR_INVALID_POINTER); 9008 9009 /* Do the job. */ 9010 int rc2 = vdThreadStartRead(pDisk); 9011 AssertRC(rc2); 9012 9013 int rc = VINF_SUCCESS; 9014 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9015 AssertPtr(pImage); 9016 if (pImage) 9023 9017 *puImageFlags = pImage->uImageFlags; 9024 } while (0); 9025 9026 if (RT_UNLIKELY(fLockRead)) 9027 { 9028 rc2 = vdThreadFinishRead(pDisk); 9029 AssertRC(rc2); 9030 } 9018 else 9019 rc = VERR_VD_IMAGE_NOT_FOUND; 9020 9021 rc2 = vdThreadFinishRead(pDisk); 9022 AssertRC(rc2); 9031 9023 9032 9024 LogFlowFunc(("returns %Rrc uImageFlags=%#x\n", rc, *puImageFlags)); … … 9038 9030 unsigned *puOpenFlags) 9039 9031 { 9040 int rc = VINF_SUCCESS;9041 int rc2;9042 bool fLockRead = false;9043 9044 9032 LogFlowFunc(("pDisk=%#p nImage=%u puOpenFlags=%#p\n", 9045 9033 pDisk, nImage, puOpenFlags)); 9046 do 9047 { 9048 /* sanity check */ 9049 AssertPtrBreakStmt(pDisk, rc = VERR_INVALID_PARAMETER); 9050 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9051 9052 /* Check arguments. */ 9053 AssertMsgBreakStmt(VALID_PTR(puOpenFlags), 9054 ("puOpenFlags=%#p\n", puOpenFlags), 9055 rc = VERR_INVALID_PARAMETER); 9056 9057 rc2 = vdThreadStartRead(pDisk); 9058 AssertRC(rc2); 9059 fLockRead = true; 9060 9061 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9062 AssertPtrBreakStmt(pImage, rc = VERR_VD_IMAGE_NOT_FOUND); 9063 9034 /* sanity check */ 9035 AssertPtrReturn(pDisk, VERR_INVALID_POINTER); 9036 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9037 9038 /* Check arguments. */ 9039 AssertPtrReturn(puOpenFlags, VERR_INVALID_POINTER); 9040 9041 /* Do the job. */ 9042 int rc2 = vdThreadStartRead(pDisk); 9043 AssertRC(rc2); 9044 9045 int rc = VINF_SUCCESS; 9046 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9047 AssertPtr(pImage); 9048 if (pImage) 9064 9049 *puOpenFlags = pImage->Backend->pfnGetOpenFlags(pImage->pBackendData); 9065 } while (0); 9066 9067 if (RT_UNLIKELY(fLockRead)) 9068 { 9069 rc2 = vdThreadFinishRead(pDisk); 9070 AssertRC(rc2); 9071 } 9050 else 9051 rc = VERR_VD_IMAGE_NOT_FOUND; 9052 9053 rc2 = vdThreadFinishRead(pDisk); 9054 AssertRC(rc2); 9072 9055 9073 9056 LogFlowFunc(("returns %Rrc uOpenFlags=%#x\n", rc, *puOpenFlags)); … … 9079 9062 unsigned uOpenFlags) 9080 9063 { 9081 int rc;9082 int rc2;9083 bool fLockWrite = false;9084 9085 9064 LogFlowFunc(("pDisk=%#p uOpenFlags=%#u\n", pDisk, uOpenFlags)); 9086 do 9087 { 9088 /* sanity check */ 9089 AssertPtrBreakStmt(pDisk, rc = VERR_INVALID_PARAMETER); 9090 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9091 9092 /* Check arguments. */ 9093 AssertMsgBreakStmt((uOpenFlags & ~VD_OPEN_FLAGS_MASK) == 0, 9094 ("uOpenFlags=%#x\n", uOpenFlags), 9095 rc = VERR_INVALID_PARAMETER); 9096 9097 rc2 = vdThreadStartWrite(pDisk); 9098 AssertRC(rc2); 9099 fLockWrite = true; 9100 9101 /* Destroy any discard state because the image might be changed to readonly mode. */ 9102 rc = vdDiscardStateDestroy(pDisk); 9103 if (RT_FAILURE(rc)) 9104 break; 9105 9065 /* sanity check */ 9066 AssertPtrReturn(pDisk, VERR_INVALID_POINTER); 9067 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9068 9069 /* Check arguments. */ 9070 AssertMsgReturn((uOpenFlags & ~VD_OPEN_FLAGS_MASK) == 0, ("uOpenFlags=%#x\n", uOpenFlags), 9071 VERR_INVALID_PARAMETER); 9072 9073 /* Do the job. */ 9074 int rc2 = vdThreadStartWrite(pDisk); 9075 AssertRC(rc2); 9076 9077 /* Destroy any discard state because the image might be changed to readonly mode. */ 9078 int rc = vdDiscardStateDestroy(pDisk); 9079 if (RT_SUCCESS(rc)) 9080 { 9106 9081 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9107 AssertPtrBreakStmt(pImage, rc = VERR_VD_IMAGE_NOT_FOUND); 9108 9109 rc = pImage->Backend->pfnSetOpenFlags(pImage->pBackendData, 9110 uOpenFlags & ~(VD_OPEN_FLAGS_HONOR_SAME | VD_OPEN_FLAGS_IGNORE_FLUSH | VD_OPEN_FLAGS_INFORM_ABOUT_ZERO_BLOCKS)); 9111 if (RT_SUCCESS(rc)) 9112 pImage->uOpenFlags = uOpenFlags & (VD_OPEN_FLAGS_HONOR_SAME | VD_OPEN_FLAGS_DISCARD | VD_OPEN_FLAGS_IGNORE_FLUSH | VD_OPEN_FLAGS_INFORM_ABOUT_ZERO_BLOCKS); 9113 } while (0); 9114 9115 if (RT_UNLIKELY(fLockWrite)) 9116 { 9117 rc2 = vdThreadFinishWrite(pDisk); 9118 AssertRC(rc2); 9119 } 9082 AssertPtr(pImage); 9083 if (pImage) 9084 { 9085 rc = pImage->Backend->pfnSetOpenFlags(pImage->pBackendData, 9086 uOpenFlags & ~(VD_OPEN_FLAGS_HONOR_SAME | VD_OPEN_FLAGS_IGNORE_FLUSH 9087 | VD_OPEN_FLAGS_INFORM_ABOUT_ZERO_BLOCKS)); 9088 if (RT_SUCCESS(rc)) 9089 pImage->uOpenFlags = uOpenFlags & (VD_OPEN_FLAGS_HONOR_SAME | VD_OPEN_FLAGS_DISCARD | VD_OPEN_FLAGS_IGNORE_FLUSH 9090 | VD_OPEN_FLAGS_INFORM_ABOUT_ZERO_BLOCKS); 9091 } 9092 else 9093 rc = VERR_VD_IMAGE_NOT_FOUND; 9094 } 9095 9096 rc2 = vdThreadFinishWrite(pDisk); 9097 AssertRC(rc2); 9120 9098 9121 9099 LogFlowFunc(("returns %Rrc\n", rc));
Note:
See TracChangeset
for help on using the changeset viewer.