[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] Clear operations exposed by backend on disconnect
By clearing the backend operations, it will be possible to live migrate to a backend that exposes different operations. This will allow live migration to/from backends that expose different enablement for Barrier, Flush, and Discard operations without relying on the backend to return BLKIF_RSP_EOPNOTSUPP to disable an unsupported operation. Also removes the check for change while reading disk features and always log the values read, as this is only called once during connection. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxx> --- src/xenvbd/frontend.c | 54 +++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c index ece7527..40611cd 100644 --- a/src/xenvbd/frontend.c +++ b/src/xenvbd/frontend.c @@ -912,17 +912,15 @@ FrontendReadDiskInfo( IN PXENVBD_FRONTEND Frontend ) { - BOOLEAN Changed; - BOOLEAN Discard; BOOLEAN DiscardFeature = FALSE; BOOLEAN DiscardEnable = TRUE; - Changed = FrontendReadFeature(Frontend, - FeatureBarrier, - &Frontend->DiskInfo.Barrier); - Changed |= FrontendReadFeature(Frontend, - FeatureFlushCache, - &Frontend->DiskInfo.FlushCache); + FrontendReadFeature(Frontend, + FeatureBarrier, + &Frontend->DiskInfo.Barrier); + FrontendReadFeature(Frontend, + FeatureFlushCache, + &Frontend->DiskInfo.FlushCache); // discard related FrontendReadFeature(Frontend, @@ -932,26 +930,19 @@ FrontendReadDiskInfo( FeatureDiscardEnable, &DiscardEnable); - Discard = DiscardFeature && DiscardEnable; + Frontend->DiskInfo.Discard = DiscardFeature && DiscardEnable; - Changed |= (Discard != Frontend->DiskInfo.Discard); - - Frontend->DiskInfo.Discard = Discard; - - Changed |= FrontendReadFeature(Frontend, - FeatureDiscardSecure, - &Frontend->DiskInfo.DiscardSecure); - Changed |= FrontendReadValue32(Frontend, - FeatureDiscardAlignment, - TRUE, - &Frontend->DiskInfo.DiscardAlignment); - Changed |= FrontendReadValue32(Frontend, - FeatureDiscardGranularity, - TRUE, - &Frontend->DiskInfo.DiscardGranularity); - - if (!Changed) - return; + FrontendReadFeature(Frontend, + FeatureDiscardSecure, + &Frontend->DiskInfo.DiscardSecure); + FrontendReadValue32(Frontend, + FeatureDiscardAlignment, + TRUE, + &Frontend->DiskInfo.DiscardAlignment); + FrontendReadValue32(Frontend, + FeatureDiscardGranularity, + TRUE, + &Frontend->DiskInfo.DiscardGranularity); Verbose("Target[%d] : Features: %s%s%s\n", Frontend->TargetId, @@ -1378,6 +1369,15 @@ FrontendDisconnect( Base64Free(Frontend->Page83.Data); Frontend->Page83.Data = NULL; Frontend->Page83.Size = 0; + + // Clear some DiskInfo values, so they can be re-read on connect. + // Allows migration to a backend with different supported operations. + Frontend->DiskInfo.Barrier = FALSE; + Frontend->DiskInfo.FlushCache = FALSE; + Frontend->DiskInfo.Discard = FALSE; + Frontend->DiskInfo.DiscardSecure = FALSE; + Frontend->DiskInfo.DiscardAlignment = 0; + Frontend->DiskInfo.DiscardGranularity = 0; } __drv_requiresIRQL(DISPATCH_LEVEL) static FORCEINLINE VOID -- 2.50.1.windows.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |