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

[win-pv-devel] [PATCH 4/5] Remove PDO set/is-missing logic from XENDISK



It's all completely unnecessary for a filter driver

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xendisk/fdo.c | 55 +++------------------------------------------
 src/xendisk/pdo.c | 67 ++++++++-----------------------------------------------
 src/xendisk/pdo.h | 16 -------------
 3 files changed, 12 insertions(+), 126 deletions(-)

diff --git a/src/xendisk/fdo.c b/src/xendisk/fdo.c
index 27db284..09f785f 100644
--- a/src/xendisk/fdo.c
+++ b/src/xendisk/fdo.c
@@ -265,28 +265,15 @@ __FdoEnumerate(
         PLIST_ENTRY     Next = ListEntry->Flink;
         PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, 
ListEntry);
         PXENDISK_PDO    Pdo = Dx->Pdo;
-        BOOLEAN         Missing;
 
-        Missing = TRUE;
         for (Index = 0; Index < Count; Index++) {
             if (PdoGetPhysicalDeviceObject(Pdo) == 
PhysicalDeviceObject[Index]) {
-                Missing = FALSE;
 #pragma prefast(suppress:6387)  // PhysicalDeviceObject[Index] could be NULL
-                ObDereferenceObject(PhysicalDeviceObject[Index]);
                 PhysicalDeviceObject[Index] = NULL; // avoid duplication
                 break;
             }
         }
 
-        if (Missing && !PdoIsMissing(Pdo)) {
-            if (PdoGetDevicePnpState(Pdo) == Present) {
-                PdoSetDevicePnpState(Pdo, Deleted);
-                PdoDestroy(Pdo);
-            } else {
-                PdoSetMissing(Pdo, "device disappeared");
-            }
-        }
-
         ListEntry = Next;
     }
 
@@ -296,7 +283,6 @@ __FdoEnumerate(
         if (PhysicalDeviceObject[Index] != NULL) {
             (VOID) PdoCreate(Fdo,
                              PhysicalDeviceObject[Index]);
-            ObDereferenceObject(PhysicalDeviceObject[Index]);
         }
     }
 
@@ -831,7 +817,6 @@ FdoQueryDeviceRelations(
 {
     KEVENT              Event;
     PIO_STACK_LOCATION  StackLocation;
-    ULONG               Size;
     PDEVICE_RELATIONS   Relations;
     PLIST_ENTRY         ListEntry;
     ULONG               Count;
@@ -875,59 +860,28 @@ FdoQueryDeviceRelations(
     if (Relations->Count != 0)
         __FdoEnumerate(Fdo, Relations);
 
-    ExFreePool(Relations);
-
     __FdoAcquireMutex(Fdo);
 
     Count = 0;
     for (ListEntry = Fdo->Dx->ListEntry.Flink;
          ListEntry != &Fdo->Dx->ListEntry;
-         ListEntry = ListEntry->Flink)
-    {
-        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, 
ListEntry);
-        PXENDISK_PDO    Pdo = Dx->Pdo;
-
-        if (PdoIsMissing(Pdo))
-            continue;
-
-        Count++;
-    }
-
-    Size = sizeof(DEVICE_RELATIONS) + (sizeof (PDEVICE_OBJECT) * Count);
-
-    Relations = ExAllocatePoolWithTag(PagedPool, Size, 'TLIF');
-
-    status = STATUS_NO_MEMORY;
-    if (Relations == NULL)
-        goto fail3;
-
-    RtlZeroMemory(Relations, Size);
-
-    for (ListEntry = Fdo->Dx->ListEntry.Flink;
-         ListEntry != &Fdo->Dx->ListEntry;
          ListEntry = ListEntry->Flink) {
         PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, 
ListEntry);
         PXENDISK_PDO    Pdo = Dx->Pdo;
 
         ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
 
-        if (PdoIsMissing(Pdo))
-            continue;
-
         if (PdoGetDevicePnpState(Pdo) == Present)
             PdoSetDevicePnpState(Pdo, Enumerated);
 
-        ObReferenceObject(PdoGetPhysicalDeviceObject(Pdo));
-        Relations->Objects[Relations->Count++] = 
PdoGetPhysicalDeviceObject(Pdo);
+        Count++;
     }
-
     ASSERT3U(Relations->Count, ==, Count);
 
-    Trace("%d PDO(s)\n", Relations->Count);
-
     __FdoReleaseMutex(Fdo);
 
-    Irp->IoStatus.Information = (ULONG_PTR)Relations;
+    Trace("%d PDO(s)\n", Relations->Count);
+
     status = STATUS_SUCCESS;
 
 done:
@@ -938,9 +892,6 @@ done:
 
     return status;
 
-fail3:
-    __FdoReleaseMutex(Fdo);
-
 fail2:
     IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
 
diff --git a/src/xendisk/pdo.c b/src/xendisk/pdo.c
index cdf4af6..dffb294 100644
--- a/src/xendisk/pdo.c
+++ b/src/xendisk/pdo.c
@@ -61,8 +61,6 @@ struct _XENDISK_PDO {
     PIRP                        DevicePowerIrp;
 
     PXENDISK_FDO                Fdo;
-    BOOLEAN                     Missing;
-    const CHAR                  *Reason;
 
     ULONG                       SectorSize;
 };
@@ -188,41 +186,6 @@ PdoGetPhysicalDeviceObject(
 }
 
 static FORCEINLINE VOID
-__PdoSetMissing(
-    IN  PXENDISK_PDO    Pdo,
-    IN  const CHAR      *Reason
-    )
-{
-    Pdo->Reason = Reason;
-    Pdo->Missing = TRUE;
-}
-
-VOID
-PdoSetMissing(
-    IN  PXENDISK_PDO    Pdo,
-    IN  const CHAR      *Reason
-    )
-{
-    __PdoSetMissing(Pdo, Reason);
-}
-
-static FORCEINLINE BOOLEAN
-__PdoIsMissing(
-    IN  PXENDISK_PDO    Pdo
-    )
-{
-    return Pdo->Missing;
-}
-
-BOOLEAN
-PdoIsMissing(
-    IN  PXENDISK_PDO    Pdo
-    )
-{
-    return __PdoIsMissing(Pdo);
-}
-
-static FORCEINLINE VOID
 __PdoLink(
     IN  PXENDISK_PDO    Pdo,
     IN  PXENDISK_FDO    Fdo
@@ -1122,23 +1085,18 @@ PdoRemoveDevice(
                     PowerState);
 
 done:
-    if (__PdoIsMissing(Pdo)) {
-        __PdoSetDevicePnpState(Pdo, Deleted);
-        IoReleaseRemoveLockAndWait(&Pdo->Dx->RemoveLock, Irp);
-    } else {
-        __PdoSetDevicePnpState(Pdo, Enumerated);
-        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
-    }
+    FdoAcquireMutex(Fdo);
+    __PdoSetDevicePnpState(Pdo, Deleted);
+    FdoReleaseMutex(Fdo);
+
+    IoReleaseRemoveLockAndWait(&Pdo->Dx->RemoveLock, Irp);
 
     status = PdoForwardIrpSynchronously(Pdo, Irp);
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
-    if (__PdoIsMissing(Pdo)) {
-        FdoAcquireMutex(Fdo);
-        PdoDestroy(Pdo);
-        FdoReleaseMutex(Fdo);
-    } else if (__PdoGetDevicePnpState(Pdo) == Enumerated)
-        __PdoSetMissing(Pdo, "Device removed");
+    FdoAcquireMutex(Fdo);
+    PdoDestroy(Pdo);
+    FdoReleaseMutex(Fdo);
 
     return status;
 
@@ -1158,7 +1116,6 @@ PdoEject(
     PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
     NTSTATUS            status;
 
-    __PdoSetMissing(Pdo, "Ejected");
     __PdoSetDevicePnpState(Pdo, Deleted);
 
     status = PdoForwardIrpSynchronously(Pdo, Irp);
@@ -2074,15 +2031,9 @@ PdoDestroy(
 
     ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
 
-    ASSERT(__PdoIsMissing(Pdo));
-    Pdo->Missing = FALSE;
-
     __PdoUnlink(Pdo);
 
-    Verbose("%p (%s)\n",
-         FilterDeviceObject,
-         Pdo->Reason);
-    Pdo->Reason = NULL;
+    Verbose("%p\n", FilterDeviceObject);
 
     Dx->Pdo = NULL;
 
diff --git a/src/xendisk/pdo.h b/src/xendisk/pdo.h
index 7866b83..566d60f 100644
--- a/src/xendisk/pdo.h
+++ b/src/xendisk/pdo.h
@@ -54,22 +54,6 @@ PdoGetPhysicalDeviceObject(
     IN  PXENDISK_PDO    Pdo
     );
 
-extern BOOLEAN
-PdoIsMissing(
-    IN  PXENDISK_PDO    Pdo
-    );
-
-extern VOID
-PdoSetMissing(
-    IN  PXENDISK_PDO    Pdo,
-    IN  const CHAR      *Reason
-    );
-
-extern BOOLEAN
-PdoIsMasked(
-    IN  PXENDISK_PDO    Pdo
-    );
-
 extern NTSTATUS
 PdoCreate(
     IN  PXENDISK_FDO    Fdo,
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

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