aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-disk.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/ide-disk.c')
-rw-r--r--drivers/ide/ide-disk.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 3c69822507e2..aed8b31ca561 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -590,20 +590,24 @@ static ide_proc_entry_t idedisk_proc[] = {
590static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) 590static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
591{ 591{
592 ide_drive_t *drive = q->queuedata; 592 ide_drive_t *drive = q->queuedata;
593 ide_task_t task; 593 ide_task_t *task = kmalloc(sizeof(*task), GFP_ATOMIC);
594 594
595 memset(&task, 0, sizeof(task)); 595 /* FIXME: map struct ide_taskfile on rq->cmd[] */
596 BUG_ON(task == NULL);
597
598 memset(task, 0, sizeof(*task));
596 if (ide_id_has_flush_cache_ext(drive->id) && 599 if (ide_id_has_flush_cache_ext(drive->id) &&
597 (drive->capacity64 >= (1UL << 28))) 600 (drive->capacity64 >= (1UL << 28)))
598 task.tf.command = WIN_FLUSH_CACHE_EXT; 601 task->tf.command = WIN_FLUSH_CACHE_EXT;
599 else 602 else
600 task.tf.command = WIN_FLUSH_CACHE; 603 task->tf.command = WIN_FLUSH_CACHE;
601 task.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE; 604 task->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
602 task.data_phase = TASKFILE_NO_DATA; 605 IDE_TFLAG_DYN;
606 task->data_phase = TASKFILE_NO_DATA;
603 607
604 rq->cmd_type = REQ_TYPE_ATA_TASKFILE; 608 rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
605 rq->cmd_flags |= REQ_SOFTBARRIER; 609 rq->cmd_flags |= REQ_SOFTBARRIER;
606 rq->special = &task; 610 rq->special = task;
607} 611}
608 612
609/* 613/*