[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 2/2] Revert "Remove PdoPnpSrb, since StorPort doesn't call for targets"
This reverts commit 0f9f5421099d1dabed11d988b3144fb8f6bfed3b. It appears that this code is called when determining if Windows can remove a PV disk. Without it Windows will not know the disk is removable and will refuse to allow it to be removed Signed-off-by: Ben.Chalmers@xxxxxxxxxx --- src/xenvbd/fdo.c | 21 +++++++++++++++++++++ src/xenvbd/pdo.c | 28 ++++++++++++++++++++++++++++ src/xenvbd/pdo.h | 6 ++++++ 3 files changed, 55 insertions(+) diff --git a/src/xenvbd/fdo.c b/src/xenvbd/fdo.c index a4fbd3d..5f1778b 100644 --- a/src/xenvbd/fdo.c +++ b/src/xenvbd/fdo.c @@ -1839,6 +1839,23 @@ FdoFindAdapter( return SP_RETURN_FOUND; } +static FORCEINLINE VOID +__FdoSrbPnp( + __in PXENVBD_FDO Fdo, + __in PSCSI_PNP_REQUEST_BLOCK Srb + ) +{ + if (!(Srb->SrbPnPFlags & SRB_PNP_FLAGS_ADAPTER_REQUEST)) { + PXENVBD_PDO Pdo; + + Pdo = __FdoGetPdo(Fdo, Srb->TargetId); + if (Pdo) { + PdoSrbPnp(Pdo, Srb); + PdoDereference(Pdo); + } + } +} + BOOLEAN FdoBuildIo( __in PXENVBD_FDO Fdo, @@ -1856,6 +1873,10 @@ FdoBuildIo( return TRUE; // dont pass to StartIo + case SRB_FUNCTION_PNP: + __FdoSrbPnp(Fdo, (PSCSI_PNP_REQUEST_BLOCK)Srb); + Srb->SrbStatus = SRB_STATUS_SUCCESS; + break; case SRB_FUNCTION_ABORT_COMMAND: Srb->SrbStatus = SRB_STATUS_ABORT_FAILED; break; diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c index 3565cc6..3ca5440 100644 --- a/src/xenvbd/pdo.c +++ b/src/xenvbd/pdo.c @@ -2237,6 +2237,34 @@ PdoReset( Trace("Target[%d] <==== (Irql=%d)\n", PdoGetTargetId(Pdo), KeGetCurrentIrql()); } + + +VOID +PdoSrbPnp( + __in PXENVBD_PDO Pdo, + __in PSCSI_PNP_REQUEST_BLOCK Srb + ) +{ + switch (Srb->PnPAction) { + case StorQueryCapabilities: { + PSTOR_DEVICE_CAPABILITIES DeviceCaps = Srb->DataBuffer; + PXENVBD_CAPS Caps = FrontendGetCaps(Pdo->Frontend); + + if (Caps->Removable) + DeviceCaps->Removable = 1; + if (Caps->Removable) + DeviceCaps->EjectSupported = 1; + if (Caps->SurpriseRemovable) + DeviceCaps->SurpriseRemovalOK = 1; + + DeviceCaps->UniqueID = 1; + + } break; + + default: + break; + } +} //============================================================================= // PnP Handler diff --git a/src/xenvbd/pdo.h b/src/xenvbd/pdo.h index 946c34f..6e3eca5 100644 --- a/src/xenvbd/pdo.h +++ b/src/xenvbd/pdo.h @@ -204,6 +204,12 @@ PdoStartIo( __in PSCSI_REQUEST_BLOCK Srb ); +extern VOID +PdoSrbPnp( + __in PXENVBD_PDO Pdo, + __in PSCSI_PNP_REQUEST_BLOCK Srb + ); + // PnP Handler __checkReturn extern NTSTATUS -- 2.7.0.windows.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |