From 48d95feba13f0e77a75cdb29425248b212d80bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 19 May 2017 16:14:10 +0000 Subject: [PATCH] [SCSIPORT]: Fixes: - In SpiScanAdapter(), after an SCSI INQUIRY command has succeeded and we are setting up a LUN extension structure, cache in its InquiryData member the inquiry data retrieved from the INQUIRY command (alternatively we might just cache a pointer to a valid "LunInfo" since the latter are also cached elsewhere). - This allows SpiBuildDeviceMap(), which is called just after SpiScanAdapter(), to correctly report in the registry SCSI tree the correct Identifier and DeviceType values for the enumerated logical units. - Use ExFreePoolWithTag in SpiScanAdapter(). svn path=/trunk/; revision=74597 --- reactos/drivers/storage/scsiport/scsiport.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/reactos/drivers/storage/scsiport/scsiport.c index dd4d8335e3a..bc4fe7d85e6 100644 --- a/reactos/drivers/storage/scsiport/scsiport.c +++ b/reactos/drivers/storage/scsiport/scsiport.c @@ -101,7 +101,7 @@ SpiSendInquiry(IN PDEVICE_OBJECT DeviceObject, IN OUT PSCSI_LUN_INFO LunInfo); static VOID -SpiScanAdapter (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension); +SpiScanAdapter(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension); static NTSTATUS SpiGetInquiryData (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, @@ -3911,6 +3911,14 @@ SpiScanAdapter(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension) DPRINT("SpiScanAdapter(): Found device of type %d at bus %d tid %d lun %d\n", InquiryData->DeviceType, Bus, Target, Lun); + /* + * Cache the inquiry data into the LUN extension (or alternatively + * we could save a pointer to LunInfo within the LunExtension?) + */ + RtlCopyMemory(&LunExtension->InquiryData, + InquiryData, + INQUIRYDATABUFFERSIZE); + /* Add this info to the linked list */ LunInfo->Next = NULL; if (LastLunInfo) @@ -3956,10 +3964,10 @@ SpiScanAdapter(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension) /* Free allocated buffers */ if (LunExtension) - ExFreePool(LunExtension); + ExFreePoolWithTag(LunExtension, TAG_SCSIPORT); if (LunInfo) - ExFreePool(LunInfo); + ExFreePoolWithTag(LunInfo, TAG_SCSIPORT); /* Sum what we found */ BusScanInfo->LogicalUnitsCount += (UCHAR)DevicesFound;