https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8653bb1b322afff64f0361...
commit 8653bb1b322afff64f0361b0d4e801f2ab889e7f Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sun Jan 5 18:06:45 2025 +0100 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Sun Jan 5 20:10:26 2025 +0100
[PARTMGR] Few code enhancements.
- PartMgrAddDevice(): If IoAttachDeviceToDeviceStack() fails, bail out immediately, instead of continuing initializing the device extension then deciding to fail.
- PartitionCreateDevice(): Initialize the fields pertaining to parent device linking in the partition device extension, before the other fields (following in a similar way what's done in PartMgrAddDevice). --- drivers/storage/partmgr/partition.c | 6 +++--- drivers/storage/partmgr/partmgr.c | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/storage/partmgr/partition.c b/drivers/storage/partmgr/partition.c index f54ccf55596..e8a38e728ca 100644 --- a/drivers/storage/partmgr/partition.c +++ b/drivers/storage/partmgr/partition.c @@ -52,6 +52,9 @@ PartitionCreateDevice( PPARTITION_EXTENSION partExt = partitionDevice->DeviceExtension; RtlZeroMemory(partExt, sizeof(*partExt));
+ partExt->DeviceObject = partitionDevice; + partExt->LowerDevice = FDObject; + partitionDevice->StackSize = FDObject->StackSize; partitionDevice->Flags |= DO_DIRECT_IO;
@@ -77,9 +80,6 @@ PartitionCreateDevice( partExt->DetectedNumber = PdoNumber; // counts only partitions with PDO created partExt->VolumeNumber = volumeNum;
- partExt->DeviceObject = partitionDevice; - partExt->LowerDevice = FDObject; - // The device is initialized partitionDevice->Flags &= ~DO_DEVICE_INITIALIZING;
diff --git a/drivers/storage/partmgr/partmgr.c b/drivers/storage/partmgr/partmgr.c index fd3fd89c247..b1c37b5d964 100644 --- a/drivers/storage/partmgr/partmgr.c +++ b/drivers/storage/partmgr/partmgr.c @@ -1201,16 +1201,15 @@ PartMgrAddDevice( deviceExtension->IsFDO = TRUE; deviceExtension->DeviceObject = deviceObject; deviceExtension->LowerDevice = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject); - deviceExtension->PhysicalDiskDO = PhysicalDeviceObject; - KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE); - - // the the attaching failed if (!deviceExtension->LowerDevice) { + // The attachment failed IoDeleteDevice(deviceObject); - return STATUS_DEVICE_REMOVED; } + deviceExtension->PhysicalDiskDO = PhysicalDeviceObject; + KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE); + deviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE;
// The device is initialized