* 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");
#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");
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
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));
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:
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;