[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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.