ide: set REQ_PREEMPT request flag in ide_do_drive_cmd() users
PATCH 1/3 ide: set REQ_PREEMPT request flag in ide_do_drive_cmd() users
* Set REQ_PREEMPT request flag in ide_do_drive_cmd() users for ide_preempt and ide_head_wait action types.
* Remove setting REQ_PREEMPT from ide_do_drive_cmd().
While at it:
* Set 'where' variable outside ide_lock.
This is a preparation for converting IDE to use blk_execute_rq().
There should be no functional changes caused by this patch.
Cc FUJITA Tomonori <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc Jens Axboe <[email protected]>
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ide/ide-cd.c | 1 + drivers/ide/ide-floppy.c | 1 + drivers/ide/ide-io.c | 7 +++---- drivers/ide/ide-tape.c | 1 + drivers/ide/ide.c | 1 + drivers/scsi/ide-scsi.c | 1 + 6 files changed, 8 insertions(+), 4 deletions(-)
drivers/ide/ide-cd.c +1 -0
@@ -216,6 +216,7 @@ static void cdrom_queue_request_sense(id rq->data_len =18 ; rq->cmd_type =REQ_TYPE_SENSE ; + rq->cmd_flags |=REQ_PREEMPT ;/* NOTE! Save the failed command in "rq->buffer" */ rq->buffer = (void *) failed_command;
drivers/ide/ide-floppy.c +1 -0
@@ -289,6 +289,7 @@ static void idefloppy_queue_pc_head(ide_ide_init_drive_cmd (rq); rq->buffer = (char *) pc; rq->cmd_type =REQ_TYPE_SPECIAL ; + rq->cmd_flags |=REQ_PREEMPT ; rq->rq_disk = floppy->disk; (void )ide_do_drive_cmd (drive, rq, ide_preempt); }
drivers/ide/ide-io.c +3 -4
@@ -1600,13 +1600,12 @@ int ide_do_drive_cmd (ide_drive_t *drive rq->end_io = blk_end_sync_rq; } +if (action == ide_preempt || action == ide_head_wait) + where =ELEVATOR_INSERT_FRONT ; +spin_lock_irqsave (&ide_lock, flags);if (action == ide_preempt) hwgroup->rq =NULL ; -if (action == ide_preempt || action == ide_head_wait) { - where =ELEVATOR_INSERT_FRONT ; - rq->cmd_flags |=REQ_PREEMPT ; - }__elv_add_request (drive->queue, rq, where,0 );ide_do_request (hwgroup,IDE_NO_IRQ );spin_unlock_irqrestore (&ide_lock, flags);
drivers/ide/ide-tape.c +1 -0
@@ -688,6 +688,7 @@ static void idetape_queue_pc_head(ide_drstruct ide_tape_obj *tape = drive->driver_data;idetape_init_rq (rq,REQ_IDETAPE_PC1 ); + rq->cmd_flags |=REQ_PREEMPT ; rq->buffer = (char *) pc; rq->rq_disk = tape->disk; (void )ide_do_drive_cmd (drive, rq, ide_preempt);
drivers/ide/ide.c +1 -0
@@ -534,6 +534,7 @@ static int generic_ide_resume(struct devmemset (&rqpm,0 ,sizeof (rqpm));memset (&args,0 ,sizeof (args)); rq.cmd_type =REQ_TYPE_PM_RESUME ; + rq.cmd_flags |=REQ_PREEMPT ; rq.special = &args; rq.data = &rqpm; rqpm.pm_step = ide_pm_state_start_resume;
drivers/scsi/ide-scsi.c +1 -0
@@ -235,6 +235,7 @@ static int idescsi_check_condition(ide_d pc->c[0 ] =REQUEST_SENSE ; pc->c[4 ] = pc->req_xfer = pc->buf_size =SCSI_SENSE_BUFFERSIZE ; rq->cmd_type =REQ_TYPE_SENSE ; + rq->cmd_flags |=REQ_PREEMPT ; pc->timeout = jiffies +WAIT_READY ;/* NOTE! Save the failed packet command in "rq->buffer" */ rq->buffer = (void *) failed_cmd->special;