Commit fb6bf18d authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] sbpcd.c

	* switched to private queue
	* set ->queue
	* switched to use of ->rq_disk
parent 4efaa1e8
...@@ -456,6 +456,7 @@ static int sbpcd[] = ...@@ -456,6 +456,7 @@ static int sbpcd[] =
* Protects access to global structures etc. * Protects access to global structures etc.
*/ */
static spinlock_t sbpcd_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED; static spinlock_t sbpcd_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED;
static struct request_queue sbpcd_queue;
MODULE_PARM(sbpcd, "2i"); MODULE_PARM(sbpcd, "2i");
MODULE_PARM(max_drives, "i"); MODULE_PARM(max_drives, "i");
...@@ -4841,7 +4842,7 @@ static void do_sbpcd_request(request_queue_t * q) ...@@ -4841,7 +4842,7 @@ static void do_sbpcd_request(request_queue_t * q)
#ifdef DEBUG_GTL #ifdef DEBUG_GTL
xnr=++xx_nr; xnr=++xx_nr;
if(blk_queue_empty(QUEUE)) if(blk_queue_empty(q))
{ {
printk( "do_sbpcd_request[%di](NULL), Pid:%d, Time:%li\n", printk( "do_sbpcd_request[%di](NULL), Pid:%d, Time:%li\n",
xnr, current->pid, jiffies); xnr, current->pid, jiffies);
...@@ -4850,18 +4851,20 @@ static void do_sbpcd_request(request_queue_t * q) ...@@ -4850,18 +4851,20 @@ static void do_sbpcd_request(request_queue_t * q)
return; return;
} }
req = elv_next_request(q);
printk(" do_sbpcd_request[%di](%p:%ld+%ld), Pid:%d, Time:%li\n", 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 #endif
if (blk_queue_empty(QUEUE)) if (blk_queue_empty(q))
return; return;
req = CURRENT; /* take out our request so no other */ req = elv_next_request(q); /* take out our request so no other */
blkdev_dequeue_request(req); /* task can fuck it up GTL */ blkdev_dequeue_request(req); /* task can fuck it up GTL */
if (req -> sector == -1) if (req -> sector == -1)
end_request(CURRENT, 0); end_request(req, 0);
spin_unlock_irq(q->queue_lock); spin_unlock_irq(q->queue_lock);
down(&ioctl_read_sem); down(&ioctl_read_sem);
...@@ -4870,12 +4873,7 @@ static void do_sbpcd_request(request_queue_t * q) ...@@ -4870,12 +4873,7 @@ static void do_sbpcd_request(request_queue_t * q)
msg(DBG_INF, "bad cmd %d\n", req->cmd); msg(DBG_INF, "bad cmd %d\n", req->cmd);
goto err_done; goto err_done;
} }
p = D_S + minor(req->rq_dev); p = req->rq_disk->private_data;
if (p->drv_id==-1) {
msg(DBG_INF, "do_request: bad device: %s\n",
kdevname(req->rq_dev));
goto err_done;
}
#if OLD_BUSY #if OLD_BUSY
while (busy_audio) sbp_sleep(HZ); /* wait a bit */ while (busy_audio) sbp_sleep(HZ); /* wait a bit */
busy_data=1; busy_data=1;
...@@ -4903,7 +4901,7 @@ static void do_sbpcd_request(request_queue_t * q) ...@@ -4903,7 +4901,7 @@ static void do_sbpcd_request(request_queue_t * q)
#endif #endif
up(&ioctl_read_sem); up(&ioctl_read_sem);
spin_lock_irq(q->queue_lock); spin_lock_irq(q->queue_lock);
end_request(CURRENT, 1); end_request(req, 1);
goto request_loop; goto request_loop;
} }
...@@ -4944,7 +4942,7 @@ static void do_sbpcd_request(request_queue_t * q) ...@@ -4944,7 +4942,7 @@ static void do_sbpcd_request(request_queue_t * q)
#endif #endif
up(&ioctl_read_sem); up(&ioctl_read_sem);
spin_lock_irq(q->queue_lock); spin_lock_irq(q->queue_lock);
end_request(CURRENT, 1); end_request(req, 1);
goto request_loop; goto request_loop;
} }
} }
...@@ -4960,7 +4958,7 @@ static void do_sbpcd_request(request_queue_t * q) ...@@ -4960,7 +4958,7 @@ static void do_sbpcd_request(request_queue_t * q)
up(&ioctl_read_sem); up(&ioctl_read_sem);
sbp_sleep(0); /* wait a bit, try again */ sbp_sleep(0); /* wait a bit, try again */
spin_lock_irq(q->queue_lock); spin_lock_irq(q->queue_lock);
end_request(CURRENT, 0); end_request(req, 0);
goto request_loop; goto request_loop;
} }
/*==========================================================================*/ /*==========================================================================*/
...@@ -5795,7 +5793,7 @@ int __init sbpcd_init(void) ...@@ -5795,7 +5793,7 @@ int __init sbpcd_init(void)
goto init_done; goto init_done;
#endif /* MODULE */ #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); request_region(CDo_command,4,major_name);
...@@ -5829,7 +5827,7 @@ int __init sbpcd_init(void) ...@@ -5829,7 +5827,7 @@ int __init sbpcd_init(void)
printk("Can't unregister %s\n", major_name); printk("Can't unregister %s\n", major_name);
} }
release_region(CDo_command,4); release_region(CDo_command,4);
blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); blk_cleanup_queue(&sbpcd_queue);
return -EIO; return -EIO;
} }
#ifdef MODULE #ifdef MODULE
...@@ -5845,7 +5843,7 @@ int __init sbpcd_init(void) ...@@ -5845,7 +5843,7 @@ int __init sbpcd_init(void)
if (sbpcd_infop == NULL) if (sbpcd_infop == NULL)
{ {
release_region(CDo_command,4); release_region(CDo_command,4);
blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); blk_cleanup_queue(&sbpcd_queue);
return -ENOMEM; return -ENOMEM;
} }
memset(sbpcd_infop, 0, sizeof(struct cdrom_device_info)); memset(sbpcd_infop, 0, sizeof(struct cdrom_device_info));
...@@ -5869,9 +5867,10 @@ int __init sbpcd_init(void) ...@@ -5869,9 +5867,10 @@ int __init sbpcd_init(void)
printk(" sbpcd: Unable to register with Uniform CD-ROm driver\n"); printk(" sbpcd: Unable to register with Uniform CD-ROm driver\n");
} }
disk->private_data = p; disk->private_data = p;
disk->queue = &sbpcd_queue;
add_disk(disk); add_disk(disk);
} }
blk_queue_hardsect_size(BLK_DEFAULT_QUEUE(MAJOR_NR), CD_FRAMESIZE); blk_queue_hardsect_size(&sbpcd_queue, CD_FRAMESIZE);
#ifndef MODULE #ifndef MODULE
init_done: init_done:
...@@ -5890,7 +5889,7 @@ void sbpcd_exit(void) ...@@ -5890,7 +5889,7 @@ void sbpcd_exit(void)
return; return;
} }
release_region(CDo_command,4); release_region(CDo_command,4);
blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); blk_cleanup_queue(&sbpcd_queue);
devfs_unregister (devfs_handle); devfs_unregister (devfs_handle);
for (j=0;j<NR_SBPCD;j++) for (j=0;j<NR_SBPCD;j++)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment