|
@@ -638,33 +638,31 @@ static void gdrom_readdisk_dma(struct work_struct *work)
|
|
|
kfree(read_command);
|
|
|
}
|
|
|
|
|
|
-static void gdrom_request_handler_dma(struct request *req)
|
|
|
-{
|
|
|
- /* dequeue, add to list of deferred work
|
|
|
- * and then schedule workqueue */
|
|
|
- blkdev_dequeue_request(req);
|
|
|
- list_add_tail(&req->queuelist, &gdrom_deferred);
|
|
|
- schedule_work(&work);
|
|
|
-}
|
|
|
-
|
|
|
static void gdrom_request(struct request_queue *rq)
|
|
|
{
|
|
|
struct request *req;
|
|
|
|
|
|
while ((req = elv_next_request(rq)) != NULL) {
|
|
|
+ blkdev_dequeue_request(req);
|
|
|
+
|
|
|
if (!blk_fs_request(req)) {
|
|
|
printk(KERN_DEBUG "GDROM: Non-fs request ignored\n");
|
|
|
- __blk_end_request_cur(req, -EIO);
|
|
|
+ __blk_end_request_all(req, -EIO);
|
|
|
+ continue;
|
|
|
}
|
|
|
if (rq_data_dir(req) != READ) {
|
|
|
printk(KERN_NOTICE "GDROM: Read only device -");
|
|
|
printk(" write request ignored\n");
|
|
|
- __blk_end_request_cur(req, -EIO);
|
|
|
+ __blk_end_request_all(req, -EIO);
|
|
|
+ continue;
|
|
|
}
|
|
|
- if (blk_rq_sectors(req))
|
|
|
- gdrom_request_handler_dma(req);
|
|
|
- else
|
|
|
- __blk_end_request_cur(req, -EIO);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Add to list of deferred work and then schedule
|
|
|
+ * workqueue.
|
|
|
+ */
|
|
|
+ list_add_tail(&req->queuelist, &gdrom_deferred);
|
|
|
+ schedule_work(&work);
|
|
|
}
|
|
|
}
|
|
|
|