[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XENVBD PATCH v3] Report VPD 0xB1 Block Device Characteristics
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> Reviewed-by: Owen Smith <owen.smith@xxxxxxxxx> Reviewed-by: Paul Durrant <paul@xxxxxxx> --- v2: fixes an unreferenced DiskInfo local variable. v3: spacing fixes src/xenvbd/target.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c index c5edaca..f07ee8b 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,37 @@ TargetInquiryB0( Srb->SrbStatus = SRB_STATUS_SUCCESS; } +static FORCEINLINE VOID +TargetInquiryB1( + IN PXENVBD_TARGET Target, + IN PSCSI_REQUEST_BLOCK Srb + ) +{ + PVPD_BLOCK_DEVICE_CHARACTERISTICS_PAGE Data = Srb->DataBuffer; + ULONG Length = Srb->DataTransferLength; + + UNREFERENCED_PARAMETER(Target); + + 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 +874,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.48.1.windows.1 Ngoc Tu Dinh | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |