sim_disk.c - Optimized read operations from unallocated VHD blocks

This commit is contained in:
Mark Pizzolato 2012-11-12 14:36:35 -08:00
parent ed463a94fc
commit a74c2d22dd

View file

@ -3244,14 +3244,13 @@ while (sects) {
uint32 BitMapBytes = (7+(NtoHl (hVHD->Dynamic.BlockSize)/SectorSize))/8; uint32 BitMapBytes = (7+(NtoHl (hVHD->Dynamic.BlockSize)/SectorSize))/8;
uint32 BitMapSectors = (BitMapBytes+SectorSize-1)/SectorSize; uint32 BitMapSectors = (BitMapBytes+SectorSize-1)/SectorSize;
SectorsInRead = 1;
if (hVHD->BAT[BlockNumber] == VHD_BAT_FREE_ENTRY) {
if (!hVHD->Parent)
memset (buf, 0, SectorSize);
else {
SectorsInRead = SectorsPerBlock - lba%SectorsPerBlock; SectorsInRead = SectorsPerBlock - lba%SectorsPerBlock;
if (SectorsInRead > sects) if (SectorsInRead > sects)
SectorsInRead = sects; SectorsInRead = sects;
if (hVHD->BAT[BlockNumber] == VHD_BAT_FREE_ENTRY) {
if (!hVHD->Parent)
memset (buf, 0, SectorSize*SectorSize);
else {
if (ReadVirtualDiskSectors(hVHD->Parent, if (ReadVirtualDiskSectors(hVHD->Parent,
buf, buf,
SectorsInRead, SectorsInRead,
@ -3266,9 +3265,6 @@ while (sects) {
} }
else { else {
BlockOffset = SectorSize*((uint64)(NtoHl (hVHD->BAT[BlockNumber]) + lba%SectorsPerBlock + BitMapSectors)); BlockOffset = SectorSize*((uint64)(NtoHl (hVHD->BAT[BlockNumber]) + lba%SectorsPerBlock + BitMapSectors));
SectorsInRead = SectorsPerBlock - lba%SectorsPerBlock;
if (SectorsInRead > sects)
SectorsInRead = sects;
if (ReadFilePosition(hVHD->File, if (ReadFilePosition(hVHD->File,
buf, buf,
SectorsInRead*SectorSize, SectorsInRead*SectorSize,