[disk,aoe,filedisk,ramdisk] Move Dev back out of WV_S_DISK_T
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 9 Jan 2011 21:02:05 +0000 (16:02 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 9 Jan 2011 21:02:05 +0000 (16:02 -0500)
But a pointer place-holder remains (for now).

src/aoe/driver.c
src/include/disk.h
src/include/filedisk.h
src/include/ramdisk.h
src/winvblock/filedisk/filedisk.c
src/winvblock/ramdisk/ramdisk.c

index 30fa599..b215c57 100644 (file)
@@ -187,6 +187,7 @@ typedef enum AOE_SEARCH_STATE_ {
 /** The AoE disk type. */
 typedef struct AOE_DISK_ {
     WV_S_DEV_EXT DevExt[1];
+    WV_S_DEV_T Dev[1];
     WV_S_DISK_T disk[1];
     UINT32 MTU;
     UCHAR ClientMac[6];
@@ -1544,13 +1545,13 @@ static VOID AoeProcessAbft_(void) {
     aoe_disk->Minor = AoEBootRecord.Minor;
     aoe_disk->MaxSectorsPerPacket = 1;
     aoe_disk->Timeout = 200000;          /* 20 ms. */
-    aoe_disk->disk->Dev->Boot = TRUE;
+    aoe_disk->Dev->Boot = TRUE;
     if (!AoeDiskInit_(aoe_disk)) {
         DBG("Couldn't find AoE disk!\n");
-        AoeDiskFree_(aoe_disk->disk->Dev);
+        AoeDiskFree_(aoe_disk->Dev);
         return;
       }
-    AoeBusAddDev(aoe_disk->disk->Dev);
+    AoeBusAddDev(aoe_disk->Dev);
     return;
 
     out_no_abft:
@@ -1648,11 +1649,11 @@ NTSTATUS STDCALL AoeBusDevCtlShow(IN PIRP irp) {
         AOE_SP_DISK_ aoe_disk = CONTAINING_RECORD(
             walker,
             AOE_S_DISK_,
-            disk[0].Dev[0].BusNode
+            Dev[0].BusNode
           );
 
         disks->Disk[count].Disk = WvlBusGetNodeNum(
-            &aoe_disk->disk->Dev->BusNode
+            &aoe_disk->Dev->BusNode
           );
         RtlCopyMemory(
             &disks->Disk[count].ClientMac,
@@ -1713,13 +1714,13 @@ NTSTATUS STDCALL AoeBusDevCtlMount(IN PIRP irp) {
     aoe_disk->Minor = (UCHAR) buffer[8];
     aoe_disk->MaxSectorsPerPacket = 1;
     aoe_disk->Timeout = 200000;             /* 20 ms. */
-    aoe_disk->disk->Dev->Boot = FALSE;
+    aoe_disk->Dev->Boot = FALSE;
     if (!AoeDiskInit_(aoe_disk)) {
         DBG("Couldn't find AoE disk!\n");
-        AoeDiskFree_(aoe_disk->disk->Dev);
+        AoeDiskFree_(aoe_disk->Dev);
         return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
       }
-    AoeBusAddDev(aoe_disk->disk->Dev);
+    AoeBusAddDev(aoe_disk->Dev);
 
     return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
   }
@@ -1752,10 +1753,11 @@ static AOE_SP_DISK_ AoeDiskCreatePdo_(void) {
     RtlZeroMemory(aoe_disk, sizeof *aoe_disk);
     /* Populate non-zero device defaults. */
     WvDiskInit(aoe_disk->disk);
-    WvDevInit(aoe_disk->disk->Dev);
-    aoe_disk->disk->Dev->Ops.Free = AoeDiskFree_;
-    aoe_disk->disk->Dev->Ops.PnpId = query_id;
-    aoe_disk->disk->Dev->ext = aoe_disk->disk;
+    WvDevInit(aoe_disk->Dev);
+    aoe_disk->Dev->Ops.Free = AoeDiskFree_;
+    aoe_disk->Dev->Ops.PnpId = query_id;
+    aoe_disk->Dev->ext = aoe_disk->disk;
+    aoe_disk->disk->Dev = aoe_disk->Dev;
     aoe_disk->disk->Media = WvlDiskMediaTypeHard;
     aoe_disk->disk->disk_ops.Io = AoeDiskIo_;
     aoe_disk->disk->disk_ops.MaxXferLen = AoeDiskMaxXferLen_;
@@ -1765,14 +1767,14 @@ static AOE_SP_DISK_ AoeDiskCreatePdo_(void) {
     aoe_disk->disk->DriverObj = AoeDriverObj_;
 
     /* Set associations for the PDO, device, disk. */
-    WvDevForDevObj(pdo, aoe_disk->disk->Dev);
+    WvDevForDevObj(pdo, aoe_disk->Dev);
     KeInitializeEvent(
         &aoe_disk->disk->SearchEvent,
         SynchronizationEvent,
         FALSE
       );
     KeInitializeSpinLock(&aoe_disk->disk->SpinLock);
-    aoe_disk->disk->Dev->Self = pdo;
+    aoe_disk->Dev->Self = pdo;
 
     /* Some device parameters. */
     pdo->Flags |= DO_DIRECT_IO;         /* FIXME? */
@@ -1811,13 +1813,13 @@ static NTSTATUS AoeIrpPower_(
       return WvlBusPower(&AoeBusMain, irp);
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
-    if (aoe_disk->disk->Dev->State == WvDevStateDeleted) {
+    if (aoe_disk->Dev->State == WvDevStateDeleted) {
         /* Even if it doesn't, a power IRP is important! */
         PoStartNextPowerIrp(irp);
         return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
       }
     /* Use the disk routine. */
-    return WvDiskIrpPower(aoe_disk->disk->Dev, irp);
+    return WvDiskIrpPower(aoe_disk->Dev, irp);
   }
 
 /* Handle an IRP_MJ_CREATE or IRP_MJ_CLOSE IRP. */
@@ -1833,7 +1835,7 @@ static NTSTATUS AoeIrpCreateClose_(
       return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
-    if (aoe_disk->disk->Dev->State == WvDevStateDeleted)
+    if (aoe_disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Always succeed with nothing to do. */
     return WvlIrpComplete(irp, 0, STATUS_SUCCESS);
@@ -1852,10 +1854,10 @@ static NTSTATUS AoeIrpSysCtl_(
       return WvlBusSysCtl(&AoeBusMain, irp);
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
-    if (aoe_disk->disk->Dev->State == WvDevStateDeleted)
+    if (aoe_disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Use the disk routine. */
-    return WvDiskIrpSysCtl(aoe_disk->disk->Dev, irp);
+    return WvDiskIrpSysCtl(aoe_disk->Dev, irp);
   }
 
 /* Handle an IRP_MJ_DEVICE_CONTROL IRP. */
@@ -1876,7 +1878,7 @@ static NTSTATUS AoeIrpDevCtl_(
       }
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
-    if (aoe_disk->disk->Dev->State == WvDevStateDeleted)
+    if (aoe_disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Use the disk routine. */
     return WvlDiskDevCtl(
@@ -1899,7 +1901,7 @@ static NTSTATUS AoeIrpScsi_(
       return WvlIrpComplete(irp, 0, STATUS_NOT_SUPPORTED);
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
-    if (aoe_disk->disk->Dev->State == WvDevStateDeleted)
+    if (aoe_disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Use the disk routine. */
     return WvlDiskScsi(
@@ -1948,10 +1950,10 @@ static NTSTATUS AoeIrpPnp_(
       }
     aoe_disk = dev_obj->DeviceExtension;
     /* Check that the device exists. */
-    if (aoe_disk->disk->Dev->State == WvDevStateDeleted)
+    if (aoe_disk->Dev->State == WvDevStateDeleted)
       return WvlIrpComplete(irp, 0, STATUS_NO_SUCH_DEVICE);
     /* Use the disk routine. */
-    return disk_pnp__dispatch(aoe_disk->disk->Dev->Self, irp, aoe_disk->disk);
+    return disk_pnp__dispatch(aoe_disk->Dev->Self, irp, aoe_disk->disk);
   }
 
 static UCHAR STDCALL AoeDiskUnitNum_(IN WV_SP_DISK_T disk) {
@@ -1962,5 +1964,5 @@ static UCHAR STDCALL AoeDiskUnitNum_(IN WV_SP_DISK_T disk) {
       );
 
     /* Possible precision loss. */
-    return (UCHAR) WvlBusGetNodeNum(&aoe_disk->disk->Dev->BusNode);
+    return (UCHAR) WvlBusGetNodeNum(&aoe_disk->Dev->BusNode);
   }
index 84cc20d..e358c0c 100644 (file)
@@ -135,7 +135,7 @@ typedef struct WV_DISK_OPS {
   } WV_S_DISK_OPS, * WV_SP_DISK_OPS;
 
 struct WV_DISK_T {
-    WV_S_DEV_T Dev[1];
+    WV_SP_DEV_T Dev;
     KEVENT SearchEvent;
     KSPIN_LOCK SpinLock;
     WVL_E_DISK_MEDIA_TYPE Media;
index 0ec1ec7..f290c99 100644 (file)
@@ -27,6 +27,7 @@
 
 typedef struct WV_FILEDISK_T {
     WV_S_DEV_EXT DevExt;
+    WV_S_DEV_T Dev[1];
     WV_S_DISK_T disk[1];
     HANDLE file;
     UINT32 hash;
index 01bc930..26c1c3d 100644 (file)
@@ -27,6 +27,7 @@
 
 typedef struct WV_RAMDISK_T {
     WV_S_DEV_EXT DevExt;
+    WV_S_DEV_T Dev[1];
     WV_S_DISK_T disk[1];
     UINT32 DiskBuf;
     UINT32 DiskSize;
index 5cbd1ba..40a5df7 100644 (file)
@@ -249,7 +249,7 @@ NTSTATUS STDCALL WvFilediskAttach(IN PIRP irp) {
     filedisk->hash = hash;
 
     /* Add the filedisk to the bus. */
-    if (!WvBusAddDev(filedisk->disk->Dev)) {
+    if (!WvBusAddDev(filedisk->Dev)) {
         status = STATUS_UNSUCCESSFUL;
         goto err_add_child;
       }
@@ -258,7 +258,7 @@ NTSTATUS STDCALL WvFilediskAttach(IN PIRP irp) {
 
     err_add_child:
 
-    WvFilediskFree_(filedisk->disk->Dev);
+    WvFilediskFree_(filedisk->Dev);
     err_pdo:
 
     err_query_info:
@@ -291,7 +291,7 @@ static UCHAR STDCALL WvFilediskUnitNum_(IN WV_SP_DISK_T disk) {
       );
 
     /* Possible precision loss. */
-    return (UCHAR) WvlBusGetNodeNum(&filedisk->disk->Dev->BusNode);
+    return (UCHAR) WvlBusGetNodeNum(&filedisk->Dev->BusNode);
   }
 
 /**
@@ -333,26 +333,27 @@ WV_SP_FILEDISK_T STDCALL WvFilediskCreatePdo(
     filedisk = pdo->DeviceExtension;
     RtlZeroMemory(filedisk, sizeof *filedisk);
     WvDiskInit(filedisk->disk);
-    WvDevInit(filedisk->disk->Dev);
-    filedisk->disk->Dev->Ops.Free = WvFilediskFree_;
-    filedisk->disk->Dev->Ops.PnpId = query_id;
-    filedisk->disk->Dev->Ops.Close = WvFilediskClose_;
-    filedisk->disk->Dev->ext = filedisk->disk;
-    filedisk->disk->Dev->IrpMj = &irp_mj;
+    WvDevInit(filedisk->Dev);
+    filedisk->Dev->Ops.Free = WvFilediskFree_;
+    filedisk->Dev->Ops.PnpId = query_id;
+    filedisk->Dev->Ops.Close = WvFilediskClose_;
+    filedisk->Dev->ext = filedisk->disk;
+    filedisk->Dev->IrpMj = &irp_mj;
+    filedisk->disk->Dev = filedisk->Dev;
     filedisk->disk->disk_ops.Io = WvFilediskIo_;
     filedisk->disk->disk_ops.UnitNum = WvFilediskUnitNum_;
     filedisk->disk->ext = filedisk;
     filedisk->disk->DriverObj = WvDriverObj;
 
     /* Set associations for the PDO, device, disk. */
-    WvDevForDevObj(pdo, filedisk->disk->Dev);
+    WvDevForDevObj(pdo, filedisk->Dev);
     KeInitializeEvent(
         &filedisk->disk->SearchEvent,
         SynchronizationEvent,
         FALSE
       );
     KeInitializeSpinLock(&filedisk->disk->SpinLock);
-    filedisk->disk->Dev->Self = pdo;
+    filedisk->Dev->Self = pdo;
 
     /* Some device parameters. */
     pdo->Flags |= DO_DIRECT_IO;         /* FIXME? */
@@ -406,7 +407,7 @@ static VOID STDCALL thread(IN PVOID StartContext) {
           );
         KeResetEvent(&filedisk_ptr->signal);
         /* Are we being torn down?  We abuse the device's Free() member. */
-        if (filedisk_ptr->disk->Dev->Ops.Free == NULL)
+        if (filedisk_ptr->Dev->Ops.Free == NULL)
           break;
         /* Process each read/write request in the list. */
         while (walker = ExInterlockedRemoveHeadList(
@@ -432,7 +433,7 @@ static VOID STDCALL thread(IN PVOID StartContext) {
           } /* while requests */
       } /* main loop */
     /* Time to tear things down. */
-    WvFilediskFree_(filedisk_ptr->disk->Dev);
+    WvFilediskFree_(filedisk_ptr->Dev);
   }
 
 static NTSTATUS STDCALL WvFilediskThreadedIo_(
@@ -507,7 +508,7 @@ WV_SP_FILEDISK_T WvFilediskCreatePdoThreaded(
     /* Use threaded routines. */
     filedisk_ptr->sync_io = WvFilediskIo_;
     filedisk_ptr->disk->disk_ops.Io = WvFilediskThreadedIo_;
-    filedisk_ptr->disk->Dev->Ops.Free = free_threaded_filedisk;
+    filedisk_ptr->Dev->Ops.Free = free_threaded_filedisk;
     /* Initialize threading parameters and start the filedisk's thread. */
     InitializeListHead(&filedisk_ptr->req_list);
     KeInitializeSpinLock(&filedisk_ptr->req_list_lock);
index 8e233cc..9d28b73 100644 (file)
@@ -150,7 +150,7 @@ static UCHAR STDCALL WvRamdiskUnitNum_(IN WV_SP_DISK_T disk) {
       );
 
     /* Possible precision loss. */
-    return (UCHAR) WvlBusGetNodeNum(&ramdisk->disk->Dev->BusNode);
+    return (UCHAR) WvlBusGetNodeNum(&ramdisk->Dev->BusNode);
   }
 
 /**
@@ -192,25 +192,26 @@ WV_SP_RAMDISK_T STDCALL WvRamdiskCreatePdo(
     ramdisk = pdo->DeviceExtension;
     RtlZeroMemory(ramdisk, sizeof *ramdisk);
     WvDiskInit(ramdisk->disk);
-    WvDevInit(ramdisk->disk->Dev);
-    ramdisk->disk->Dev->Ops.Free = WvRamdiskFree_;
-    ramdisk->disk->Dev->Ops.PnpId = WvRamdiskQueryId_;
-    ramdisk->disk->Dev->ext = ramdisk->disk;
-    ramdisk->disk->Dev->IrpMj = &irp_mj;
+    WvDevInit(ramdisk->Dev);
+    ramdisk->Dev->Ops.Free = WvRamdiskFree_;
+    ramdisk->Dev->Ops.PnpId = WvRamdiskQueryId_;
+    ramdisk->Dev->ext = ramdisk->disk;
+    ramdisk->Dev->IrpMj = &irp_mj;
+    ramdisk->disk->Dev = ramdisk->Dev;
     ramdisk->disk->disk_ops.Io = WvRamdiskIo_;
     ramdisk->disk->disk_ops.UnitNum = WvRamdiskUnitNum_;
     ramdisk->disk->ext = ramdisk;
     ramdisk->disk->DriverObj = WvDriverObj;
 
     /* Set associations for the PDO, device, disk. */
-    WvDevForDevObj(pdo, ramdisk->disk->Dev);
+    WvDevForDevObj(pdo, ramdisk->Dev);
     KeInitializeEvent(
         &ramdisk->disk->SearchEvent,
         SynchronizationEvent,
         FALSE
       );
     KeInitializeSpinLock(&ramdisk->disk->SpinLock);
-    ramdisk->disk->Dev->Self = pdo;
+    ramdisk->Dev->Self = pdo;
 
     /* Some device parameters. */
     pdo->Flags |= DO_DIRECT_IO;         /* FIXME? */