[bus] Remove members dev_name and dos_dev_name
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 19 Dec 2010 15:07:20 +0000 (10:07 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 19 Dec 2010 15:07:20 +0000 (10:07 -0500)
Move responsibility for bus device naming out of the bus
module and into the caller.

The AoE module is a bit mixed-up just now and doesn't
work.  It's currently going to try to create a symlink
but the PDO for the AoE bus is not going to have been
named by the bus module.  What we really want is for the
AoE bus' _FDO_ to be the named device...  I think.

src/aoe/bus.c
src/include/bus.h
src/winvblock/bus/bus.c
src/winvblock/driver.c

index aee0551..613fe40 100644 (file)
 #include "mount.h"
 #include "debug.h"
 
+/* Names for the AoE bus. */
+#define AOE_M_BUS_NAME_ (L"\\Device\\AoE")
+#define AOE_M_BUS_DOSNAME_ (L"\\DosDevices\\AoE")
+
 /* TODO: Remove this pull from aoe/driver.c */
 extern device__dispatch_func aoe__scan;
 extern device__dispatch_func aoe__show;
@@ -48,6 +52,16 @@ void aoe_bus__free(void);
 
 /* Globals. */
 WV_SP_BUS_T aoe_bus = NULL;
+static UNICODE_STRING AoeBusName_ = {
+    sizeof AOE_M_BUS_NAME_,
+    sizeof AOE_M_BUS_NAME_,
+    AOE_M_BUS_NAME_
+  };
+static UNICODE_STRING AoeBusDosname_ = {
+    sizeof AOE_M_BUS_DOSNAME_,
+    sizeof AOE_M_BUS_DOSNAME_,
+    AOE_M_BUS_DOSNAME_
+  };
 
 static NTSTATUS STDCALL aoe_bus__dev_ctl_dispatch_(
     IN struct device__type * dev,
@@ -87,6 +101,7 @@ static NTSTATUS STDCALL aoe_bus__dev_ctl_dispatch_(
  */
 winvblock__bool aoe_bus__create(void) {
     WV_SP_BUS_T new_bus;
+    NTSTATUS status;
 
     /* We should only be called once. */
     if (aoe_bus) {
@@ -101,25 +116,28 @@ winvblock__bool aoe_bus__create(void) {
       }
     /* When the PDO is created, we need to handle PnP ID queries. */
     new_bus->Dev->ops.pnp_id = aoe_bus__pnp_id_;
-    /* Name the bus when the PDO is created. */
-    RtlInitUnicodeString(
-        &new_bus->dev_name,
-        L"\\Device\\AoE"
-      );
-    RtlInitUnicodeString(
-        &new_bus->dos_dev_name,
-        L"\\DosDevices\\AoE"
-      );
-    new_bus->named = TRUE;
     /* Add it as a sub-bus to WinVBlock. */
     if (!WvBusAddChild(driver__bus(), new_bus->Dev)) {
         DBG("Couldn't add AoE bus to WinVBlock bus!\n");
         goto err_add_child;
       }
+    /* DosDevice symlink. */
+    status = IoCreateSymbolicLink(
+        &AoeBusDosname_,
+        &AoeBusName_
+      );
+    if (!NT_SUCCESS(status)) {
+        DBG("IoCreateSymbolicLink() failed!\n");
+        goto err_dos_symlink;
+      }
     /* All done. */
     aoe_bus = new_bus;
     return TRUE;
 
+    IoDeleteSymbolicLink(&AoeBusDosname_);
+    err_dos_symlink:
+
+    IoDeleteDevice(aoe_bus->Dev->Self);
     err_add_child:
 
     device__free(new_bus->Dev);
@@ -134,8 +152,7 @@ void aoe_bus__free(void) {
       /* Nothing to do. */
       return;
 
-    IoDeleteSymbolicLink(&aoe_bus->dos_dev_name);
-    IoDeleteSymbolicLink(&aoe_bus->dev_name);
+    IoDeleteSymbolicLink(&AoeBusDosname_);
     IoDeleteDevice(aoe_bus->Dev->Self);
     #if 0
     bus__remove_child(driver__bus(), aoe_bus->Dev);
index 6787e01..c2bd469 100644 (file)
@@ -46,9 +46,6 @@ typedef struct WV_BUS_T {
     winvblock__uint32 Children;
     struct device__type * first_child;
     KSPIN_LOCK SpinLock;
-    UNICODE_STRING dev_name;
-    UNICODE_STRING dos_dev_name;
-    winvblock__bool named;
     LIST_ENTRY work_items;
     KSPIN_LOCK work_items_lock;
     KEVENT work_signal;
index 68340c3..7ab3445 100644 (file)
@@ -332,7 +332,7 @@ static PDEVICE_OBJECT STDCALL bus__create_pdo_(IN struct device__type * dev) {
     status = IoCreateDevice(
         dev->DriverObject,
         sizeof (driver__dev_ext),
-        &bus->dev_name,
+        NULL,
         FILE_DEVICE_CONTROLLER,
         FILE_DEVICE_SECURE_OPEN,
         FALSE,
@@ -342,17 +342,6 @@ static PDEVICE_OBJECT STDCALL bus__create_pdo_(IN struct device__type * dev) {
         DBG("IoCreateDevice() failed!\n");
         goto err_pdo;
       }
-    /* DosDevice symlink. */
-    if (bus->named) {
-        status = IoCreateSymbolicLink(
-            &bus->dos_dev_name,
-            &bus->dev_name
-          );
-      }
-    if (!NT_SUCCESS(status)) {
-        DBG("IoCreateSymbolicLink");
-        goto err_name;
-      }
 
     /* Set associations for the bus, device, PDO. */
     device__set(pdo, dev);
@@ -368,8 +357,6 @@ static PDEVICE_OBJECT STDCALL bus__create_pdo_(IN struct device__type * dev) {
 
     return pdo;
 
-    err_name:
-
     IoDeleteDevice(pdo);
     err_pdo:
 
index 84bf0b4..91c3c67 100644 (file)
 #include "ramdisk.h"
 #include "debug.h"
 
+/* Names for the main bus. */
+#define WV_M_BUS_NAME_ (L"\\Device\\" winvblock__literal_w)
+#define WV_M_BUS_DOSNAME_ (L"\\DosDevices\\" winvblock__literal_w)
+
 /* Exported. */
 PDRIVER_OBJECT driver__obj_ptr = NULL;
 
@@ -51,6 +55,16 @@ static void * driver__state_handle_;
 static winvblock__bool driver__started_ = FALSE;
 static PDEVICE_OBJECT driver__bus_fdo_ = NULL;
 static KSPIN_LOCK driver__bus_fdo_lock_;
+static UNICODE_STRING WvBusName_ = {
+    sizeof WV_M_BUS_NAME_,
+    sizeof WV_M_BUS_NAME_,
+    WV_M_BUS_NAME_
+  };
+static UNICODE_STRING WvBusDosname_ = {
+    sizeof WV_M_BUS_DOSNAME_,
+    sizeof WV_M_BUS_DOSNAME_,
+    WV_M_BUS_DOSNAME_
+  };
 /* Contains TXTSETUP.SIF/BOOT.INI-style OsLoadOptions parameters. */
 static LPWSTR driver__os_load_opts_ = NULL;
 
@@ -145,21 +159,11 @@ static NTSTATUS STDCALL driver__attach_fdo_(
         status = STATUS_INSUFFICIENT_RESOURCES;
         goto err_bus;
       }
-    /* In booting, he has a name.  His name is WinVBlock. */
-    RtlInitUnicodeString(
-        &bus->dev_name,
-        L"\\Device\\" winvblock__literal_w
-      );
-    RtlInitUnicodeString(
-        &bus->dos_dev_name,
-        L"\\DosDevices\\" winvblock__literal_w
-      );
-    bus->named = TRUE;
     /* Create the bus FDO. */
     status = IoCreateDevice(
         DriverObject,
         sizeof (driver__dev_ext),
-        &bus->dev_name,
+        &WvBusName_,
         FILE_DEVICE_CONTROLLER,
         FILE_DEVICE_SECURE_OPEN,
         FALSE,
@@ -171,8 +175,8 @@ static NTSTATUS STDCALL driver__attach_fdo_(
       }
     /* DosDevice symlink. */
     status = IoCreateSymbolicLink(
-        &bus->dos_dev_name,
-        &bus->dev_name
+        &WvBusDosname_,
+        &WvBusName_
       );
     if (!NT_SUCCESS(status)) {
         DBG("IoCreateSymbolicLink() failed!\n");
@@ -222,7 +226,7 @@ static NTSTATUS STDCALL driver__attach_fdo_(
 
     err_attach:
 
-    IoDeleteSymbolicLink(&bus->dos_dev_name);
+    IoDeleteSymbolicLink(&WvBusDosname_);
     err_dos_symlink:
 
     IoDeleteDevice(fdo);
@@ -528,16 +532,10 @@ static NTSTATUS driver__dispatch_pnp_(
   }
 
 static void STDCALL driver__unload_(IN PDRIVER_OBJECT DriverObject) {
-    UNICODE_STRING DosDeviceName;
-
     DBG("Unloading...\n");
     if (driver__state_handle_ != NULL)
       PoUnregisterSystemState(driver__state_handle_);
-    RtlInitUnicodeString(
-        &DosDeviceName,
-        L"\\DosDevices\\" winvblock__literal_w
-      );
-    IoDeleteSymbolicLink(&DosDeviceName);
+    IoDeleteSymbolicLink(&WvBusDosname_);
     driver__bus_fdo_ = NULL;
     wv_free(driver__os_load_opts_);
     driver__started_ = FALSE;