[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [XENVBD PATCH] Report VPD 0xB1 Block Device Characteristics
+ PXENVBD_DISKINFO DiskInfo = FrontendGetDiskInfo(Target->Frontend);
This triggers a warning (and error) in checked builds. "DiskInfo local variable is initialised but not referenced."
Removing the line for the DiskInfo variable, and adding a "UNREFERENCE_PARAMETER(Target);" is required to compile checked builds.
Owen
On Fri, Feb 14, 2025 at 9:28 AM Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx> wrote:
Report Medium Rotation Rate to be 1 (i.e. solid state disk) to prevent
Windows from defragmenting virtual disks by default.
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
src/xenvbd/target.c | 37 ++++++++++++++++++++++++++++++++++---
1 file changed, 34 insertions(+), 3 deletions(-)
diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c
index c5edaca..0775ede 100644
--- a/src/xenvbd/target.c
+++ b/src/xenvbd/target.c
@@ -691,16 +691,17 @@ TargetInquiry00(
return;
RtlZeroMemory(Data, Length);
- if (Length < 8)
+ if (Length < 9)
return;
- Data->PageLength = 4;
+ Data->PageLength = 5;
Data->SupportedPageList[0] = 0x00;
Data->SupportedPageList[1] = 0x80;
Data->SupportedPageList[2] = 0x83;
Data->SupportedPageList[3] = 0xB0;
+ Data->SupportedPageList[4] = 0xB1;
- Srb->DataTransferLength = 8;
+ Srb->DataTransferLength = 9;
Srb->SrbStatus = SRB_STATUS_SUCCESS;
}
@@ -830,6 +831,35 @@ TargetInquiryB0(
Srb->SrbStatus = SRB_STATUS_SUCCESS;
}
+static FORCEINLINE VOID
+TargetInquiryB1(
+ IN PXENVBD_TARGET Target,
+ IN PSCSI_REQUEST_BLOCK Srb
+ )
+{
+ PXENVBD_DISKINFO DiskInfo = FrontendGetDiskInfo(Target->Frontend);
+ PVPD_BLOCK_DEVICE_CHARACTERISTICS_PAGE Data = "">
+ ULONG Length = Srb->DataTransferLength;
+
+ Srb->SrbStatus = SRB_STATUS_ERROR;
+
+ if (Data == NULL)
+ return;
+ RtlZeroMemory(Data, Length);
+
+ if (Length < sizeof(VPD_BLOCK_DEVICE_CHARACTERISTICS_PAGE))
+ return;
+
+ Data->PageCode = 0xB1;
+ Data->PageLength = 0x3C; // as per spec
+
+ Data->MediumRotationRateMsb = 0;
+ Data->MediumRotationRateLsb = 1; // SSD
+
+ Srb->DataTransferLength = sizeof(VPD_BLOCK_DEVICE_CHARACTERISTICS_PAGE);
+ Srb->SrbStatus = SRB_STATUS_SUCCESS;
+}
+
static DECLSPEC_NOINLINE VOID
TargetInquiry(
IN PXENVBD_TARGET Target,
@@ -842,6 +872,7 @@ TargetInquiry(
case 0x80: TargetInquiry80(Target, Srb); break;
case 0x83: TargetInquiry83(Target, Srb); break;
case 0xB0: TargetInquiryB0(Target, Srb); break;
+ case 0xB1: TargetInquiryB1(Target, Srb); break;
default: Srb->SrbStatus = SRB_STATUS_ERROR; break;
}
} else {
--
2.47.1.windows.2
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|