commented early_printk patch because of rejects.
[linux-flexiantxendom0-3.2.10.git] / drivers / cdrom / sbpcd.c
index b79e3ef..c57a5d8 100644 (file)
@@ -463,7 +463,7 @@ static int sbpcd[] =
  * Protects access to global structures etc.
  */
 static spinlock_t sbpcd_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED;
-static struct request_queue sbpcd_queue;
+static struct request_queue *sbpcd_queue;
 
 MODULE_PARM(sbpcd, "2i");
 MODULE_PARM(max_drives, "i");
@@ -5803,7 +5803,15 @@ int __init sbpcd_init(void)
 #endif /* MODULE */
        }
 
-       blk_init_queue(&sbpcd_queue, do_sbpcd_request, &sbpcd_lock);
+       /*
+        * init error handling is broken beyond belief in this driver...
+        */
+       sbpcd_queue = blk_init_queue(do_sbpcd_request, &sbpcd_lock);
+       if (!sbpcd_queue) {
+               release_region(CDo_command,4);
+               unregister_blkdev(MAJOR_NR, major_name);
+               return -ENOMEM;
+       }
 
        devfs_mk_dir("sbp");
 
@@ -5836,7 +5844,7 @@ int __init sbpcd_init(void)
                                printk("Can't unregister %s\n", major_name);
                        }
                        release_region(CDo_command,4);
-                       blk_cleanup_queue(&sbpcd_queue);
+                       blk_cleanup_queue(sbpcd_queue);
                        return -EIO;
                }
 #ifdef MODULE
@@ -5852,7 +5860,7 @@ int __init sbpcd_init(void)
                if (sbpcd_infop == NULL)
                {
                         release_region(CDo_command,4);
-                       blk_cleanup_queue(&sbpcd_queue);
+                       blk_cleanup_queue(sbpcd_queue);
                         return -ENOMEM;
                }
                memset(sbpcd_infop, 0, sizeof(struct cdrom_device_info));
@@ -5875,10 +5883,10 @@ int __init sbpcd_init(void)
                        printk(" sbpcd: Unable to register with Uniform CD-ROm driver\n");
                }
                disk->private_data = p;
-               disk->queue = &sbpcd_queue;
+               disk->queue = sbpcd_queue;
                add_disk(disk);
        }
-       blk_queue_hardsect_size(&sbpcd_queue, CD_FRAMESIZE);
+       blk_queue_hardsect_size(sbpcd_queue, CD_FRAMESIZE);
 
 #ifndef MODULE
  init_done:
@@ -5897,7 +5905,7 @@ void sbpcd_exit(void)
                return;
        }
        release_region(CDo_command,4);
-       blk_cleanup_queue(&sbpcd_queue);
+       blk_cleanup_queue(sbpcd_queue);
        for (j=0;j<NR_SBPCD;j++)
        {
                if (D_S[j].drv_id==-1) continue;