|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |