[disk] Minor, cosmetic touch-ups
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 20 Dec 2010 21:47:52 +0000 (16:47 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 20 Dec 2010 21:47:52 +0000 (16:47 -0500)
src/include/disk.h
src/winvblock/disk/disk.c

index 8f1611f..5c9ae55 100644 (file)
@@ -46,18 +46,18 @@ typedef enum WV_DISK_IO_MODE {
     WvDiskIoModes
   } WV_E_DISK_IO_MODE, * WV_EP_DISK_IO_MODE;
 
-/* Forward declaration */
+/* Forward declaration. */
 winvblock__def_struct ( disk__type );
 
 /**
- * I/O Request
+ * I/O Request.
  *
- * @v dev_ptr           Points to the disk's device structure
- * @v mode              Read / write mode
- * @v start_sector      First sector for request
- * @v sector_count      Number of sectors to work with
- * @v buffer            Buffer to read / write sectors to / from
- * @v irp               Interrupt request packet for this request
+ * @v dev_ptr           Points to the disk's device structure.
+ * @v mode              Read / write mode.
+ * @v start_sector      First sector for request.
+ * @v sector_count      Number of sectors to work with.
+ * @v buffer            Buffer to read / write sectors to / from.
+ * @v irp               Interrupt request packet for this request.
  */
 #  define disk__io_decl( x ) \
 \
@@ -72,16 +72,16 @@ x ( \
  )
 /*
  * Function pointer for a disk I/O routine.
- * 'indent' mangles this, so it looks weird
+ * 'indent' mangles this, so it looks weird.
  */
 typedef disk__io_decl (
    ( *disk__io_routine )
  );
 
 /**
- * Maximum transfer length response routine
+ * Maximum transfer length response routine.
  *
- * @v disk_ptr        The disk being queried
+ * @v disk_ptr        The disk being queried.
  */
 #  define disk__max_xfer_len_decl( x ) \
 \
@@ -91,16 +91,16 @@ x ( \
  )
 /*
  * Function pointer for a maximum transfer length response routine.
- * 'indent' mangles this, so it looks weird
+ * 'indent' mangles this, so it looks weird.
  */
 typedef disk__max_xfer_len_decl (
    ( *disk__max_xfer_len_routine )
  );
 
 /**
- * Disk initialization routine
+ * Disk initialization routine.
  *
- * @v disk_ptr        The disk device being initialized
+ * @v disk_ptr        The disk device being initialized.
  */
 #  define disk__init_decl( x ) \
 \
@@ -110,16 +110,16 @@ x ( \
  )
 /*
  * Function pointer for a disk initialization routine.
- * 'indent' mangles this, so it looks weird
+ * 'indent' mangles this, so it looks weird.
  */
 typedef disk__init_decl (
    ( *disk__init_routine )
  );
 
 /**
- * Disk close routine
+ * Disk close routine.
  *
- * @v disk_ptr        The disk device being closed
+ * @v disk_ptr        The disk device being closed.
  */
 #  define disk__close_decl( x ) \
 \
@@ -129,7 +129,7 @@ x ( \
  )
 /*
  * Function pointer for a disk close routine.
- * 'indent' mangles this, so it looks weird
+ * 'indent' mangles this, so it looks weird.
  */
 typedef disk__close_decl (
    ( *disk__close_routine )
@@ -164,11 +164,11 @@ struct _disk__type
 };
 
 /*
- * Yield a pointer to the disk
+ * Yield a pointer to the disk.
  */
 #  define disk__get_ptr( dev_ptr ) ( ( disk__type_ptr ) dev_ptr->ext )
 
-/* An MBR C/H/S address and ways to access its components */
+/* An MBR C/H/S address and ways to access its components. */
 typedef winvblock__uint8 chs[3];
 
 #  define     chs_head( chs ) chs[0]
@@ -181,7 +181,7 @@ typedef winvblock__uint8 chs[3];
 #    pragma pack(1)
 #  endif
 
-/* An MBR */
+/* An MBR. */
 winvblock__def_struct ( mbr )
 {
   winvblock__uint8 code[440];
@@ -211,10 +211,10 @@ extern disk__max_xfer_len_decl (
  );
 
 /**
- * Attempt to guess a disk's geometry
+ * Attempt to guess a disk's geometry.
  *
- * @v boot_sect_ptr     The MBR or VBR with possible geometry clues
- * @v disk_ptr          The disk to set the geometry for
+ * @v boot_sect_ptr     The MBR or VBR with possible geometry clues.
+ * @v disk_ptr          The disk to set the geometry for.
  */
 extern winvblock__lib_func void disk__guess_geometry (
   IN WV_AP_DISK_BOOT_SECT,
@@ -222,9 +222,9 @@ extern winvblock__lib_func void disk__guess_geometry (
  );
 
 /**
- * Create a new disk
+ * Create a new disk.
  *
- * @ret disk_ptr        The address of a new disk, or NULL for failure
+ * @ret disk_ptr        The address of a new disk, or NULL for failure.
  *
  * This function should not be confused with a PDO creation routine, which is
  * actually implemented for each device type.  This routine will allocate a
index 6f47d07..7d83675 100644 (file)
@@ -62,8 +62,11 @@ static WV_F_DEV_DISPATCH disk__sys_ctl_;
 static LIST_ENTRY disk_list;
 static KSPIN_LOCK disk_list_lock;
 winvblock__bool WvDiskIsRemovable[WvDiskMediaTypes] = { TRUE, FALSE, TRUE };
-PWCHAR WvDiskCompatIds[WvDiskMediaTypes] =
-  { L"GenSFloppy", L"GenDisk", L"GenCdRom" };
+PWCHAR WvDiskCompatIds[WvDiskMediaTypes] = {
+    L"GenSFloppy",
+    L"GenDisk",
+    L"GenCdRom"
+  };
 WV_S_DEV_IRP_MJ disk__irp_mj_ = {
     disk__power_,
     disk__sys_ctl_,
@@ -72,13 +75,9 @@ WV_S_DEV_IRP_MJ disk__irp_mj_ = {
     disk_pnp__dispatch,
   };
 
-static
-disk__max_xfer_len_decl (
-  default_max_xfer_len
- )
-{
-  return 1024 * 1024;
-}
+static disk__max_xfer_len_decl(default_max_xfer_len) {
+    return 1024 * 1024;
+  }
 
 /* Initialize a disk. */
 static winvblock__bool STDCALL disk__init_(IN WV_SP_DEV_T dev) {
@@ -86,10 +85,9 @@ static winvblock__bool STDCALL disk__init_(IN WV_SP_DEV_T dev) {
     return disk_ptr->disk_ops.init(disk_ptr);
   }
 
-disk__init_decl ( default_init )
-{
-  return TRUE;
-}
+disk__init_decl(default_init) {
+    return TRUE;
+  }
 
 static void STDCALL disk__close_(IN WV_SP_DEV_T dev_ptr) {
     disk__type_ptr disk_ptr = disk__get_ptr(dev_ptr);
@@ -97,10 +95,9 @@ static void STDCALL disk__close_(IN WV_SP_DEV_T dev_ptr) {
     return;
   }
 
-disk__close_decl ( default_close )
-{
-  return;
-}
+disk__close_decl(default_close) {
+    return;
+  }
 
 static NTSTATUS STDCALL disk__power_(IN WV_SP_DEV_T dev, IN PIRP irp) {
     PoStartNextPowerIrp(irp);
@@ -138,37 +135,34 @@ static PDEVICE_OBJECT STDCALL create_pdo(IN WV_SP_DEV_T dev_ptr) {
       FILE_REMOVABLE_MEDIA | FILE_READ_ONLY_DEVICE
     };
   
-    DBG ( "Entry\n" );
-    /*
-     * Point to the disk details provided
-     */
-    disk_ptr = disk__get_ptr ( dev_ptr );
-    /*
-     * Create the disk PDO
-     */
-    status =
-      IoCreateDevice ( driver__obj_ptr, sizeof ( driver__dev_ext ), NULL,
-                    disk_types[disk_ptr->Media],
-                    FILE_AUTOGENERATED_DEVICE_NAME | FILE_DEVICE_SECURE_OPEN |
-                    characteristics[disk_ptr->Media], FALSE, &dev_obj_ptr );
-    if ( !NT_SUCCESS ( status ) )
-      {
-        Error ( "IoCreateDevice", status );
+    DBG("Entry\n");
+    /* Point to the disk details provided. */
+    disk_ptr = disk__get_ptr(dev_ptr);
+    /* Create the disk PDO. */
+    status = IoCreateDevice(
+        driver__obj_ptr,
+        sizeof (driver__dev_ext),
+        NULL,
+        disk_types[disk_ptr->Media],
+        FILE_AUTOGENERATED_DEVICE_NAME |
+          FILE_DEVICE_SECURE_OPEN |
+          characteristics[disk_ptr->Media],
+        FALSE,
+        &dev_obj_ptr
+      );
+    if (!NT_SUCCESS(status)) {
+        Error("IoCreateDevice", status);
         return NULL;
       }
-    /*
-     * Set associations for the PDO, device, disk
-     */
+    /* Set associations for the PDO, device, disk. */
     WvDevForDevObj(dev_obj_ptr, dev_ptr);
     dev_ptr->Self = dev_obj_ptr;
-    KeInitializeEvent ( &disk_ptr->SearchEvent, SynchronizationEvent, FALSE );
-    KeInitializeSpinLock ( &disk_ptr->SpinLock );
-    /*
-     * Some device parameters
-     */
-    dev_obj_ptr->Flags |= DO_DIRECT_IO;        /* FIXME? */
-    dev_obj_ptr->Flags |= DO_POWER_INRUSH;     /* FIXME? */
-    DBG ( "Exit\n" );
+    KeInitializeEvent(&disk_ptr->SearchEvent, SynchronizationEvent, FALSE);
+    KeInitializeSpinLock(&disk_ptr->SpinLock);
+    /* Some device parameters. */
+    dev_obj_ptr->Flags |= DO_DIRECT_IO;         /* FIXME? */
+    dev_obj_ptr->Flags |= DO_POWER_INRUSH;      /* FIXME? */
+    DBG("Exit\n");
     return dev_obj_ptr;
   }
 
@@ -180,55 +174,45 @@ static PDEVICE_OBJECT STDCALL create_pdo(IN WV_SP_DEV_T dev_ptr) {
 #ifdef _MSC_VER
 #  pragma pack(1)
 #endif
-winvblock__def_struct ( fat_extra )
-{
-  winvblock__uint8 bs_drvnum;
-  winvblock__uint8 bs_resv1;
-  winvblock__uint8 bs_bootsig;
-  winvblock__uint32 bs_volid;
-  char bs_vollab[11];
-  char bs_filsystype[8];
-} __attribute__ ( ( packed ) );
-
-winvblock__def_struct ( fat_super )
-{
-  winvblock__uint8 bs_jmpboot[3];
-  char bs_oemname[8];
-  winvblock__uint16 bpb_bytspersec;
-  winvblock__uint8 bpb_secperclus;
-  winvblock__uint16 bpb_rsvdseccnt;
-  winvblock__uint8 bpb_numfats;
-  winvblock__uint16 bpb_rootentcnt;
-  winvblock__uint16 bpb_totsec16;
-  winvblock__uint8 bpb_media;
-  winvblock__uint16 bpb_fatsz16;
-  winvblock__uint16 bpb_secpertrk;
-  winvblock__uint16 bpb_numheads;
-  winvblock__uint32 bpb_hiddsec;
-  winvblock__uint32 bpb_totsec32;
-  union
-  {
-    struct
-    {
-      fat_extra extra;
-    } fat16;
-    struct
-    {
-      winvblock__uint32 bpb_fatsz32;
-      winvblock__uint16 bpb_extflags;
-      winvblock__uint16 bpb_fsver;
-      winvblock__uint32 bpb_rootclus;
-      winvblock__uint16 bpb_fsinfo;
-      winvblock__uint16 bpb_bkbootsec;
-      char bpb_reserved[12];
-      /*
-       * Clever, eh?  Same fields, different offset... 
-       */
-      fat_extra extra;
-    } fat32 __attribute__ ( ( packed ) );
-  } x;
-} __attribute__ ( ( __packed__ ) );
-
+winvblock__def_struct(fat_extra) {
+    winvblock__uint8 bs_drvnum;
+    winvblock__uint8 bs_resv1;
+    winvblock__uint8 bs_bootsig;
+    winvblock__uint32 bs_volid;
+    char bs_vollab[11];
+    char bs_filsystype[8];
+  } __attribute__((packed));
+
+winvblock__def_struct(fat_super) {
+    winvblock__uint8 bs_jmpboot[3];
+    char bs_oemname[8];
+    winvblock__uint16 bpb_bytspersec;
+    winvblock__uint8 bpb_secperclus;
+    winvblock__uint16 bpb_rsvdseccnt;
+    winvblock__uint8 bpb_numfats;
+    winvblock__uint16 bpb_rootentcnt;
+    winvblock__uint16 bpb_totsec16;
+    winvblock__uint8 bpb_media;
+    winvblock__uint16 bpb_fatsz16;
+    winvblock__uint16 bpb_secpertrk;
+    winvblock__uint16 bpb_numheads;
+    winvblock__uint32 bpb_hiddsec;
+    winvblock__uint32 bpb_totsec32;
+    union {
+        struct { fat_extra extra; } fat16;
+        struct {
+            winvblock__uint32 bpb_fatsz32;
+            winvblock__uint16 bpb_extflags;
+            winvblock__uint16 bpb_fsver;
+            winvblock__uint32 bpb_rootclus;
+            winvblock__uint16 bpb_fsinfo;
+            winvblock__uint16 bpb_bkbootsec;
+            char bpb_reserved[12];
+            /* Clever, eh?  Same fields, different offset... */
+            fat_extra extra;
+          } fat32 __attribute__((packed));
+      } x;
+  } __attribute__((__packed__));
 #ifdef _MSC_VER
 #  pragma pack()
 #endif
@@ -239,160 +223,155 @@ winvblock__def_struct ( fat_super )
  * @v boot_sect_ptr     The MBR or VBR with possible geometry clues.
  * @v disk_ptr          The disk to set the geometry for.
  */
-winvblock__lib_func void disk__guess_geometry (
+winvblock__lib_func void disk__guess_geometry(
     IN WV_AP_DISK_BOOT_SECT boot_sect_ptr,
     IN OUT disk__type_ptr disk_ptr
   ) {
-  winvblock__uint16 heads = 0,
-    sects_per_track = 0,
-    cylinders;
-  mbr_ptr as_mbr;
+    winvblock__uint16 heads = 0, sects_per_track = 0, cylinders;
+    mbr_ptr as_mbr;
 
-  if ( ( boot_sect_ptr == NULL ) || ( disk_ptr == NULL ) )
-    return;
+    if ((boot_sect_ptr == NULL) || (disk_ptr == NULL))
+      return;
 
-  /*
-   * FAT superblock geometry checking taken from syslinux/memdisk/setup.c by
-   * H. Peter Anvin.  Licensed under the terms of the GNU General Public
-   * License version 2 or later.
-   */
-  {
     /*
-     * Look for a FAT superblock and if we find something that looks
-     * enough like one, use geometry from that.  This takes care of
-     * megafloppy images and unpartitioned hard disks. 
+     * FAT superblock geometry checking taken from syslinux/memdisk/setup.c by
+     * H. Peter Anvin.  Licensed under the terms of the GNU General Public
+     * License version 2 or later.
      */
-    fat_extra_ptr extra = NULL;
-    fat_super_ptr fs = ( fat_super_ptr ) boot_sect_ptr;
-
-    if ( ( fs->bpb_media == 0xf0 || fs->bpb_media >= 0xf8 )
-        && ( fs->bs_jmpboot[0] == 0xe9 || fs->bs_jmpboot[0] == 0xeb )
-        && fs->bpb_bytspersec == 512 && fs->bpb_numheads >= 1
-        && fs->bpb_numheads <= 256 && fs->bpb_secpertrk >= 1
-        && fs->bpb_secpertrk <= 63 )
-      {
-       extra = fs->bpb_fatsz16 ? &fs->x.fat16.extra : &fs->x.fat32.extra;
-       if ( !
-            ( extra->bs_bootsig == 0x29 && extra->bs_filsystype[0] == 'F'
-              && extra->bs_filsystype[1] == 'A'
-              && extra->bs_filsystype[2] == 'T' ) )
-         extra = NULL;
-      }
-    if ( extra )
-      {
-       heads = fs->bpb_numheads;
-       sects_per_track = fs->bpb_secpertrk;
-      }
-  }
-  /*
-   * If we couldn't parse a FAT superblock, try checking MBR params.
-   * Logic derived from syslinux/memdisk/setup.c by H. Peter Anvin
-   */
-  as_mbr = ( mbr_ptr ) boot_sect_ptr;
-  if ( ( heads == 0 ) && ( sects_per_track == 0 )
-       && ( as_mbr->mbr_sig == 0xAA55 ) )
     {
-      int i;
-      for ( i = 0; i < 4; i++ )
-       {
-         if ( !( as_mbr->partition[i].status & 0x7f )
-              && as_mbr->partition[i].type )
-           {
-             winvblock__uint8 h,
-              s;
-
-             h = chs_head ( as_mbr->partition[i].chs_start ) + 1;
-             s = chs_sector ( as_mbr->partition[i].chs_start );
-
-             if ( heads < h )
-               heads = h;
-             if ( sects_per_track < s )
-               sects_per_track = s;
-
-             h = chs_head ( as_mbr->partition[i].chs_end ) + 1;
-             s = chs_sector ( as_mbr->partition[i].chs_end );
-
-             if ( heads < h )
-               heads = h;
-             if ( sects_per_track < s )
-               sects_per_track = s;
-           }
-       }
-    }
-  /*
-   * If we were unable to guess, use some hopeful defaults
-   */
-  if ( !heads )
-    heads = 255;
-  if ( !sects_per_track )
-    sects_per_track = 63;
-  /*
-   * Set params that are not already filled
-   */
-  if ( !disk_ptr->Heads )
-    disk_ptr->Heads = heads;
-  if ( !disk_ptr->Sectors )
-    disk_ptr->Sectors = sects_per_track;
-  if ( !disk_ptr->Cylinders )
-    disk_ptr->Cylinders = disk_ptr->LBADiskSize / ( heads * sects_per_track );
-}
+        /*
+         * Look for a FAT superblock and if we find something that looks
+         * enough like one, use geometry from that.  This takes care of
+         * megafloppy images and unpartitioned hard disks. 
+         */
+        fat_extra_ptr extra = NULL;
+        fat_super_ptr fs = (fat_super_ptr) boot_sect_ptr;
+  
+        if (
+            (fs->bpb_media == 0xf0 || fs->bpb_media >= 0xf8) &&
+            (fs->bs_jmpboot[0] == 0xe9 || fs->bs_jmpboot[0] == 0xeb) &&
+            fs->bpb_bytspersec == 512 &&
+            fs->bpb_numheads >= 1 &&
+            fs->bpb_numheads <= 256 &&
+            fs->bpb_secpertrk >= 1 &&
+            fs->bpb_secpertrk <= 63
+          ) {
+            extra = fs->bpb_fatsz16 ? &fs->x.fat16.extra : &fs->x.fat32.extra;
+            if (!(
+                extra->bs_bootsig == 0x29 &&
+                extra->bs_filsystype[0] == 'F' &&
+                extra->bs_filsystype[1] == 'A' &&
+                extra->bs_filsystype[2] == 'T'
+              ))
+              extra = NULL;
+          }
+        if (extra) {
+            heads = fs->bpb_numheads;
+            sects_per_track = fs->bpb_secpertrk;
+          }
+      } /* sub-scope */
+    /*
+     * If we couldn't parse a FAT superblock, try checking MBR params.
+     * Logic derived from syslinux/memdisk/setup.c by H. Peter Anvin.
+     */
+    as_mbr = (mbr_ptr) boot_sect_ptr;
+    if (
+        (heads == 0 ) &&
+        (sects_per_track == 0) &&
+        (as_mbr->mbr_sig == 0xAA55)
+      ) {
+        int i;
+
+        for (i = 0; i < 4; i++) {
+            if (
+                !(as_mbr->partition[i].status & 0x7f) &&
+                as_mbr->partition[i].type
+              ) {
+                winvblock__uint8 h, s;
+
+                h = chs_head(as_mbr->partition[i].chs_start) + 1;
+                s = chs_sector(as_mbr->partition[i].chs_start);
+
+                if (heads < h)
+                  heads = h;
+                if (sects_per_track < s)
+                  sects_per_track = s;
+
+                h = chs_head(as_mbr->partition[i].chs_end) + 1;
+                s = chs_sector(as_mbr->partition[i].chs_end);
+
+                if (heads < h)
+                  heads = h;
+                if (sects_per_track < s)
+                  sects_per_track = s;
+              } /* if */
+          } /* for */
+      } /* if */
+    /* If we were unable to guess, use some hopeful defaults. */
+    if (!heads)
+      heads = 255;
+    if (!sects_per_track)
+      sects_per_track = 63;
+    /* Set params that are not already filled. */
+    if (!disk_ptr->Heads)
+      disk_ptr->Heads = heads;
+    if (!disk_ptr->Sectors)
+      disk_ptr->Sectors = sects_per_track;
+    if (!disk_ptr->Cylinders)
+      disk_ptr->Cylinders = disk_ptr->LBADiskSize / (heads * sects_per_track);
+  }
 
 /**
- * Create a new disk
+ * Create a new disk.
  *
- * @ret disk_ptr        The address of a new disk, or NULL for failure
+ * @ret disk_ptr        The address of a new disk, or NULL for failure.
  *
- * See the header file for additional details
+ * See the header file for additional details.
  */
-winvblock__lib_func disk__type_ptr
-disk__create (
-  void
- )
-{
-  WV_SP_DEV_T dev_ptr;
-  disk__type_ptr 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
-   */
-  disk_ptr = wv_mallocz(sizeof *disk_ptr);
-  if ( disk_ptr == NULL )
-    goto err_nodisk;
-  /*
-   * Track the new disk in our global list
-   */
-  ExInterlockedInsertTailList ( &disk_list, &disk_ptr->tracking,
-                               &disk_list_lock );
-  /*
-   * Populate non-zero device defaults
-   */
-  disk_ptr->device = dev_ptr;
-  disk_ptr->prev_free = dev_ptr->Ops.Free;
-  disk_ptr->disk_ops.max_xfer_len = default_max_xfer_len;
-  disk_ptr->disk_ops.init = default_init;
-  disk_ptr->disk_ops.close = default_close;
-  dev_ptr->Ops.Close = disk__close_;
-  dev_ptr->Ops.CreatePdo = create_pdo;
-  dev_ptr->Ops.Free = free_disk;
-  dev_ptr->Ops.Init = disk__init_;
-  dev_ptr->ext = disk_ptr;
-  dev_ptr->IrpMj = &disk__irp_mj_;
-  KeInitializeSpinLock ( &disk_ptr->SpinLock );
-
-  return disk_ptr;
-
-err_nodisk:
-
-  WvDevFree(dev_ptr);
-err_nodev:
-
-  return NULL;
-}
+winvblock__lib_func disk__type_ptr disk__create(void) {
+    WV_SP_DEV_T dev_ptr;
+    disk__type_ptr 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.
+     */
+    disk_ptr = wv_mallocz(sizeof *disk_ptr);
+    if (disk_ptr == NULL)
+      goto err_nodisk;
+    /* Track the new disk in our global list. */
+    ExInterlockedInsertTailList(
+        &disk_list,
+        &disk_ptr->tracking,
+        &disk_list_lock
+      );
+    /* Populate non-zero device defaults. */
+    disk_ptr->device = dev_ptr;
+    disk_ptr->prev_free = dev_ptr->Ops.Free;
+    disk_ptr->disk_ops.max_xfer_len = default_max_xfer_len;
+    disk_ptr->disk_ops.init = default_init;
+    disk_ptr->disk_ops.close = default_close;
+    dev_ptr->Ops.Close = disk__close_;
+    dev_ptr->Ops.CreatePdo = create_pdo;
+    dev_ptr->Ops.Free = free_disk;
+    dev_ptr->Ops.Init = disk__init_;
+    dev_ptr->ext = disk_ptr;
+    dev_ptr->IrpMj = &disk__irp_mj_;
+    KeInitializeSpinLock(&disk_ptr->SpinLock);
+
+    return disk_ptr;
+
+    err_nodisk:
+
+    WvDevFree(dev_ptr);
+    err_nodev:
+
+    return NULL;
+  }
 
 /**
  * Initialize the global, disk-common environment.
@@ -412,9 +391,9 @@ NTSTATUS disk__module_init(void) {
  *
  * @v dev_ptr           Points to the disk device to delete.
  */
-static void STDCALL free_disk(IN WV_SP_DEV_T dev_ptr)
-  {
+static void STDCALL free_disk(IN WV_SP_DEV_T dev_ptr) {
     disk__type_ptr disk_ptr = disk__get_ptr(dev_ptr);
+
     /* Free the "inherited class". */
     disk_ptr->prev_free(dev_ptr);
     /*
@@ -423,26 +402,28 @@ static void STDCALL free_disk(IN WV_SP_DEV_T dev_ptr)
      * result in a race condition.  Something to keep in mind...
      */
     ExInterlockedRemoveHeadList(disk_ptr->tracking.Blink, &disk_list_lock);
-  
+
     wv_free(disk_ptr);
   }
 
-/* See header for details */
-disk__io_decl ( disk__io )
-{
-  disk__type_ptr disk_ptr;
-
-  /*
-   * Establish a pointer to the disk
-   */
-  disk_ptr = disk__get_ptr ( dev_ptr );
+/* See header for details. */
+disk__io_decl(disk__io) {
+    disk__type_ptr disk_ptr;
 
-  return disk_ptr->disk_ops.io ( dev_ptr, mode, start_sector, sector_count,
-                                buffer, irp );
-}
+    /* Establish a pointer to the disk. */
+    disk_ptr = disk__get_ptr(dev_ptr);
+
+    return disk_ptr->disk_ops.io(
+        dev_ptr,
+        mode,
+        start_sector,
+        sector_count,
+        buffer,
+        irp
+      );
+  }
 
-/* See header for details */
-disk__max_xfer_len_decl ( disk__max_xfer_len )
-{
-  return disk_ptr->disk_ops.max_xfer_len ( disk_ptr );
-}
+/* See header for details. */
+disk__max_xfer_len_decl(disk__max_xfer_len) {
+    return disk_ptr->disk_ops.max_xfer_len(disk_ptr);
+  }