[disk] Put the device structure right in the disk structure
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 24 Dec 2010 15:02:24 +0000 (10:02 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 24 Dec 2010 15:02:24 +0000 (10:02 -0500)
src/include/disk.h
src/winvblock/disk/disk.c

index 1d0065d..4fab2ad 100644 (file)
@@ -103,7 +103,7 @@ typedef struct WV_DISK_OPS {
   } WV_S_DISK_OPS, * WV_SP_DISK_OPS;
 
 struct WV_DISK_T {
-    WV_SP_DEV_T Dev;
+    WV_S_DEV_T Dev[1];
     KEVENT SearchEvent;
     KSPIN_LOCK SpinLock;
     winvblock__bool BootDrive;
index 95a7fcc..71dca75 100644 (file)
@@ -334,10 +334,6 @@ winvblock__lib_func WV_SP_DISK_T disk__create(void) {
     WV_SP_DEV_T dev_ptr;
     WV_SP_DISK_T disk_ptr;
 
-    /* Try to create a device. */
-    dev_ptr = WvDevCreate();
-    if (dev_ptr == NULL)
-      goto err_nodev;
     /*
      * Disk devices might be used for booting and should
      * not be allocated from a paged memory pool.
@@ -345,6 +341,10 @@ winvblock__lib_func WV_SP_DISK_T disk__create(void) {
     disk_ptr = wv_mallocz(sizeof *disk_ptr);
     if (disk_ptr == NULL)
       goto err_nodisk;
+
+    dev_ptr = disk_ptr->Dev;
+    WvDevInit(dev_ptr);
+
     /* Track the new disk in our global list. */
     ExInterlockedInsertTailList(
         &disk_list,
@@ -352,7 +352,6 @@ winvblock__lib_func WV_SP_DISK_T disk__create(void) {
         &disk_list_lock
       );
     /* Populate non-zero device defaults. */
-    disk_ptr->Dev = dev_ptr;
     disk_ptr->prev_free = dev_ptr->Ops.Free;
     disk_ptr->disk_ops.MaxXferLen = default_max_xfer_len;
     disk_ptr->disk_ops.Init = WvDiskDefaultInit_;
@@ -369,9 +368,6 @@ winvblock__lib_func WV_SP_DISK_T disk__create(void) {
 
     err_nodisk:
 
-    WvDevFree(dev_ptr);
-    err_nodev:
-
     return NULL;
   }