Two small block fixes for 2.6.39-rc
Hi Linus,
Two things here:
- The fix for the IDE queue re-run on early request_fn exit (or otherwise old plug re-run use).
- A bug in the ->check_events() conversion in a staging driver.
Please pull.
git://git.kernel.dk/linux-2.6-block.git for-linus
Jens Axboe (1):
ide: ensure that we re-run the queue handler
Tejun Heo (1):
staging: Fix bdops->check_events() misconversion in cyasblkdev_block.c
drivers/ide/ide-io.c | 12 +++++++++++- .../westbridge/astoria/block/cyasblkdev_block.c | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-)
drivers/ide/ide-io.c +11 -1
@@ -440,6 +440,7 @@ void do_ide_request(struct request_queue *q)struct ide_host *host = hwif->host;struct request *rq =NULL ;ide_startstop_t startstop; +unsigned long queue_run_ms =3 ;/* old plug delay */ spin_unlock_irq (q->queue_lock);
@@ -459,6 +460,9 @@ repeat: prev_port = hwif->host->cur_port;if (drive->dev_flags &IDE_DFLAG_SLEEPING &&time_after (drive->sleep, jiffies)) { +unsigned long left = jiffies - drive->sleep; + + queue_run_ms =jiffies_to_msecs (left +1 );ide_unlock_port (hwif); goto plug_device; }
@@ -547,8 +551,10 @@ plug_device: plug_device_2:spin_lock_irq (q->queue_lock); -if (rq) +if (rq) {blk_requeue_request (q, rq); +blk_delay_queue (q, queue_run_ms); + } }void ide_requeue_and_plug (ide_drive_t *drive,struct request *rq)
@@ -562,6 +568,10 @@ void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)blk_requeue_request (q, rq);spin_unlock_irqrestore (q->queue_lock, flags); + +/* Use 3ms as that was the old plug delay */ +if (rq) +blk_delay_queue (q,3 ); }static int drive_is_ready (ide_drive_t *drive)
drivers/staging/westbridge/astoria/block/cyasblkdev_block.c +1 -1
@@ -1191,7 +1191,7 @@ static int cyasblkdev_add_disks(int bus_num, bd->user_disk_1->first_minor = (devidx +1 ) <<CYASBLKDEV_SHIFT ; bd->user_disk_1->minors =8 ; bd->user_disk_1->fops = &cyasblkdev_bdops; - bd->user_disk_0->events =DISK_EVENT_MEDIA_CHANGE ; + bd->user_disk_1->events =DISK_EVENT_MEDIA_CHANGE ; bd->user_disk_1->private_data = bd; bd->user_disk_1->queue = bd->queue.queue; bd->dbgprn_flags =DBGPRN_RD_RQ ;
Signature · 1 line
Jens Axboe