static void __do_gscd_request(unsigned long dummy)
{
- unsigned int block, dev;
+ struct request *req;
+ unsigned int block;
unsigned int nsect;
- repeat:
- if (blk_queue_empty(QUEUE))
+repeat:
+ if (blk_queue_empty(&gscd_queue))
return;
- dev = minor(CURRENT->rq_dev);
- block = CURRENT->sector;
- nsect = CURRENT->nr_sectors;
+ req = elv_next_request(&gscd_queue);
+ block = req->sector;
+ nsect = req->nr_sectors;
- if (CURRENT->sector == -1)
+ if (req->sector == -1)
goto out;
- if (CURRENT->cmd != READ) {
- printk("GSCD: bad cmd %d\n", CURRENT->cmd);
- end_request(CURRENT, 0);
+ if (req->cmd != READ) {
- printk("GSCD: bad cmd %p\n", req->cmd);
++ printk("GSCD: bad cmd %d\n", req->cmd);
+ end_request(req, 0);
goto repeat;
}
return;
}
+ req = elv_next_request(q);
+
printk(" do_sbpcd_request[%di](%p:%ld+%ld), Pid:%d, Time:%li\n",
- xnr, CURRENT, CURRENT->sector, CURRENT->nr_sectors, current->pid, jiffies);
+ xnr, req, req->sector, req->nr_sectors, current->pid, jiffies);
#endif
-
- if (blk_queue_empty(QUEUE))
+ if (blk_queue_empty(q))
return;
- req = CURRENT;
+ req = elv_next_request(q); /* take out our request so no other */
- blkdev_dequeue_request(req); /* task can fuck it up GTL */
if (req -> sector == -1)
- end_request(CURRENT, 0);
+ end_request(req, 0);
spin_unlock_irq(q->queue_lock);
down(&ioctl_read_sem);
- if (req->cmd != READ)
+ if (rq_data_dir(CURRENT) != READ)
{
- msg(DBG_INF, "bad cmd %d\n", req->cmd);
+ msg(DBG_INF, "bad cmd %d\n", req->cmd[0]);
goto err_done;
}
- p = D_S + minor(req->rq_dev);
- if (p->drv_id==-1) {
- msg(DBG_INF, "do_request: bad device: %s\n",
- kdevname(req->rq_dev));
- goto err_done;
- }
+ p = req->rq_disk->private_data;
#if OLD_BUSY
while (busy_audio) sbp_sleep(HZ); /* wait a bit */
busy_data=1;
goto init_done;
#endif /* MODULE */
}
- blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), do_sbpcd_request, &sbpcd_lock);
+ blk_init_queue(&sbpcd_queue, do_sbpcd_request, &sbpcd_lock);
- request_region(CDo_command,4,major_name);
-
devfs_handle = devfs_mk_dir (NULL, "sbp", NULL);
+
for (j=0;j<NR_SBPCD;j++)
{
struct cdrom_device_info * sbpcd_infop;