[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/4 v2] Consolidate macro'ed access to properties



Replace specific accessors for members of the XENVBD_CAPS,
XENVBD_FEATURES and XENVBD_DISKINFO structures, with an
accessor for the structure, and direct accesses for the structure
members.
Remove all manually implemented FrontendGet* accessors, using a
new macro for returning a pointer to a member.

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xenvbd/frontend.c | 85 +++++++++++--------------------------------
 src/xenvbd/frontend.h |  9 +----
 src/xenvbd/target.c   | 29 +++++++++------
 3 files changed, 40 insertions(+), 83 deletions(-)

diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c
index 912fc7e..ef60f9c 100644
--- a/src/xenvbd/frontend.c
+++ b/src/xenvbd/frontend.c
@@ -130,6 +130,23 @@ FrontendGet ## _name ## (                       \
     return __FrontendGet ## _name ## (Frontend);\
 }
 
+
+#define FRONTEND_GET_PROPERTY_PTR(_name, _type) \
+static FORCEINLINE _type                        \
+__FrontendGet ## _name ## (                     \
+    IN  PXENVBD_FRONTEND    Frontend            \
+    )                                           \
+{                                               \
+    return &Frontend-> ## _name ## ;            \
+}                                               \
+_type                                           \
+FrontendGet ## _name ## (                       \
+    IN  PXENVBD_FRONTEND    Frontend            \
+    )                                           \
+{                                               \
+    return __FrontendGet ## _name ## (Frontend);\
+}
+
 FRONTEND_GET_PROPERTY(Target, PXENVBD_TARGET)
 FRONTEND_GET_PROPERTY(Ring, PXENVBD_RING)
 FRONTEND_GET_PROPERTY(Granter, PXENVBD_GRANTER)
@@ -138,74 +155,14 @@ FRONTEND_GET_PROPERTY(DeviceId, ULONG)
 FRONTEND_GET_PROPERTY(BackendDomain, ULONG)
 FRONTEND_GET_PROPERTY(BackendPath, PCHAR)
 FRONTEND_GET_PROPERTY(FrontendPath, PCHAR)
-//FRONTEND_GET_PROPERTY(Caps, PXENVBD_CAPS)
-PXENVBD_CAPS
-FrontendGetCaps(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return &Frontend->Caps;
-}
-//FRONTEND_GET_PROPERTY(Features, PXENVBD_FEATURES)
-PXENVBD_FEATURES
-FrontendGetFeatures(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return &Frontend->Features;
-}
-//FRONTEND_GET_PROPERTY(DiskInfo, PXENVBD_DISKINFO)
-PXENVBD_DISKINFO
-FrontendGetDiskInfo(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return &Frontend->DiskInfo;
-}
-//FRONTEND_GET_PROPERTY(Connected, BOOLEAN)
-BOOLEAN
-FrontendGetConnected(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return Frontend->Caps.Connected;
-}
-//FRONTEND_GET_PROPERTY(ReadOnly, BOOLEAN)
-BOOLEAN
-FrontendGetReadOnly(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return !!(Frontend->DiskInfo.DiskInfo & VDISK_READONLY);
-}
-//FRONTEND_GET_PROPERTY(Discard, BOOLEAN)
-BOOLEAN
-FrontendGetDiscard(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return Frontend->Features.Discard;
-}
-//FRONTEND_GET_PROPERTY(FlushCache, BOOLEAN)
-BOOLEAN
-FrontendGetFlushCache(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return Frontend->Features.FlushCache;
-}
-//FRONTEND_GET_PROPERTY(Barrier, BOOLEAN)
-BOOLEAN
-FrontendGetBarrier(
-    IN  PXENVBD_FRONTEND    Frontend
-    )
-{
-    return Frontend->Features.Barrier;
-}
 FRONTEND_GET_PROPERTY(MaxQueues, ULONG)
 FRONTEND_GET_PROPERTY(NumQueues, ULONG)
+FRONTEND_GET_PROPERTY_PTR(Caps, PXENVBD_CAPS)
+FRONTEND_GET_PROPERTY_PTR(Features, PXENVBD_FEATURES)
+FRONTEND_GET_PROPERTY_PTR(DiskInfo, PXENVBD_DISKINFO)
 
 #undef FRONTEND_GET_PROPERTY
+#undef FRONTEND_GET_PROPERTY_PTR
 
 //=============================================================================
 #define FRONTEND_POOL_TAG            'tnFX'
diff --git a/src/xenvbd/frontend.h b/src/xenvbd/frontend.h
index 34f91b4..dc7b55f 100644
--- a/src/xenvbd/frontend.h
+++ b/src/xenvbd/frontend.h
@@ -159,16 +159,11 @@ FRONTEND_GET_PROPERTY(DeviceId, ULONG)
 FRONTEND_GET_PROPERTY(BackendDomain, ULONG)
 FRONTEND_GET_PROPERTY(BackendPath, PCHAR)
 FRONTEND_GET_PROPERTY(FrontendPath, PCHAR)
+FRONTEND_GET_PROPERTY(MaxQueues, ULONG)
+FRONTEND_GET_PROPERTY(NumQueues, ULONG)
 FRONTEND_GET_PROPERTY(Caps, PXENVBD_CAPS)
 FRONTEND_GET_PROPERTY(Features, PXENVBD_FEATURES)
 FRONTEND_GET_PROPERTY(DiskInfo, PXENVBD_DISKINFO)
-FRONTEND_GET_PROPERTY(Connected, BOOLEAN)
-FRONTEND_GET_PROPERTY(ReadOnly, BOOLEAN)
-FRONTEND_GET_PROPERTY(Discard, BOOLEAN)
-FRONTEND_GET_PROPERTY(FlushCache, BOOLEAN)
-FRONTEND_GET_PROPERTY(Barrier, BOOLEAN)
-FRONTEND_GET_PROPERTY(MaxQueues, ULONG)
-FRONTEND_GET_PROPERTY(NumQueues, ULONG)
 
 #undef FRONTEND_GET_PROPERTY
 
diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c
index a07fc45..7dc18f3 100644
--- a/src/xenvbd/target.c
+++ b/src/xenvbd/target.c
@@ -223,11 +223,11 @@ TargetReadWrite(
     ULONG                   NumSectors;
 
     Srb->SrbStatus = SRB_STATUS_ERROR;
-    if (!FrontendGetConnected(Frontend))
+    if (!FrontendGetCaps(Frontend)->Connected)
         goto fail1;
 
     // disallow writes to read-only disks
-    if (FrontendGetReadOnly(Frontend) &&
+    if (FrontendGetDiskInfo(Frontend)->DiskInfo & VDISK_READONLY &&
         Cdb_OperationEx(Srb) == SCSIOP_WRITE)
         goto fail2;
 
@@ -266,15 +266,15 @@ TargetSyncCache(
     PXENVBD_RING            Ring = FrontendGetRing(Frontend);
 
     Srb->SrbStatus = SRB_STATUS_ERROR;
-    if (!FrontendGetConnected(Frontend))
+    if (!FrontendGetCaps(Frontend)->Connected)
         goto fail1;
 
-    if (FrontendGetReadOnly(Frontend))
+    if (FrontendGetDiskInfo(Frontend)->DiskInfo & VDISK_READONLY)
         goto fail2;
 
     // If neither FLUSH or BARRIER is supported, just succceed the SRB
-    if (!(FrontendGetFlushCache(Frontend) ||
-          FrontendGetBarrier(Frontend)))
+    if (!(FrontendGetFeatures(Frontend)->FlushCache ||
+          FrontendGetFeatures(Frontend)->Barrier))
         goto succeed;
 
     Srb->SrbStatus = SRB_STATUS_PENDING;
@@ -302,13 +302,13 @@ TargetUnmap(
     PXENVBD_RING            Ring = FrontendGetRing(Frontend);
 
     Srb->SrbStatus = SRB_STATUS_ERROR;
-    if (!FrontendGetConnected(Frontend))
+    if (!FrontendGetCaps(Frontend)->Connected)
         goto fail1;
 
-    if (FrontendGetReadOnly(Frontend))
+    if (FrontendGetDiskInfo(Frontend)->DiskInfo & VDISK_READONLY)
         goto fail2;
 
-    if (!FrontendGetDiscard(Frontend))
+    if (!FrontendGetFeatures(Frontend)->Discard)
         goto succeed;
 
     Srb->SrbStatus = SRB_STATUS_PENDING;
@@ -359,7 +359,7 @@ __TargetModeSense(
         // Fill in CachingParams
         Caching->PageCode           = MODE_PAGE_CACHING;
         Caching->PageLength         = sizeof(MODE_CACHING_PAGE);
-        Caching->WriteCacheEnable   = FrontendGetFlushCache(Target->Frontend) 
? 1 : 0;
+        Caching->WriteCacheEnable   = 
FrontendGetFeatures(Target->Frontend)->FlushCache ? 1 : 0;
 
         *ModeDataLength += sizeof(MODE_CACHING_PAGE);
         *Size           += sizeof(MODE_CACHING_PAGE);
@@ -386,12 +386,15 @@ TargetModeSense(
     IN  PSCSI_REQUEST_BLOCK Srb
     )
 {
+    PXENVBD_FRONTEND        Frontend = Target->Frontend;
+    PXENVBD_DISKINFO        DiskInfo = FrontendGetDiskInfo(Frontend);
     PMODE_PARAMETER_HEADER  Data  = Srb->DataBuffer;
     ULONG                   Length = Srb->DataTransferLength;
     ULONG                   BlockDescrLength = 0;
     ULONG                   ModeDataLength = 0;
     ULONG                   Size;
 
+
     Srb->SrbStatus = SRB_STATUS_ERROR;
 
     if (Data == NULL)
@@ -403,7 +406,7 @@ TargetModeSense(
 
     // Header
     Data->MediumType                = 0;
-    Data->DeviceSpecificParameter   = FrontendGetReadOnly(Target->Frontend) ? 
+    Data->DeviceSpecificParameter   = (DiskInfo->DiskInfo & VDISK_READONLY) ?
                                                     MODE_DSP_WRITE_PROTECT : 0;
     Size = sizeof(MODE_PARAMETER_HEADER);
 
@@ -431,6 +434,8 @@ TargetModeSense10(
     IN  PSCSI_REQUEST_BLOCK     Srb
     )
 {
+    PXENVBD_FRONTEND            Frontend = Target->Frontend;
+    PXENVBD_DISKINFO            DiskInfo = FrontendGetDiskInfo(Frontend);
     PMODE_PARAMETER_HEADER10    Data  = Srb->DataBuffer;
     ULONG                       Length = Srb->DataTransferLength;
     ULONG                       BlockDescrLength = 0;
@@ -448,7 +453,7 @@ TargetModeSense10(
 
     // Header
     Data->MediumType                = 0;
-    Data->DeviceSpecificParameter   = FrontendGetReadOnly(Target->Frontend) ? 
+    Data->DeviceSpecificParameter   = (DiskInfo->DiskInfo & VDISK_READONLY) ?
                                                     MODE_DSP_WRITE_PROTECT : 0;
     Size = sizeof(MODE_PARAMETER_HEADER10);
 
-- 
2.51.2.windows.1




 


Rackspace

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