lkml.org 
[lkml]   [2009]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 12/14] ide: use ide_complete_cmd() for head unload commands
    From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    Subject: [PATCH] ide: use ide_complete_cmd() for head unload commands

    Move handling of head unload commands from task_no_data_intr()
    to ide_complete_cmd() and then use ide_complete_cmd() also for
    head unload commands.

    Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    ---
    drivers/ide/ide-io.c | 11 +++++++++++
    drivers/ide/ide-taskfile.c | 13 +++----------
    2 files changed, 14 insertions(+), 10 deletions(-)

    Index: b/drivers/ide/ide-io.c
    ===================================================================
    --- a/drivers/ide/ide-io.c
    +++ b/drivers/ide/ide-io.c
    @@ -146,12 +146,23 @@ EXPORT_SYMBOL_GPL(ide_end_dequeued_reque
    void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
    {
    struct ide_taskfile *tf = &cmd->tf;
    + u8 tf_cmd = tf->command;

    tf->error = err;
    tf->status = stat;

    drive->hwif->tp_ops->tf_read(drive, cmd);

    + if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) &&
    + tf_cmd == ATA_CMD_IDLEIMMEDIATE) {
    + if (tf->lbal != 0xc4) {
    + printk(KERN_ERR "%s: head unload failed!\n",
    + drive->name);
    + ide_tf_dump(drive->name, tf);
    + } else
    + drive->dev_flags |= IDE_DFLAG_PARKED;
    + }
    +
    if (cmd->tf_flags & IDE_TFLAG_DYN)
    kfree(cmd);
    }
    Index: b/drivers/ide/ide-taskfile.c
    ===================================================================
    --- a/drivers/ide/ide-taskfile.c
    +++ b/drivers/ide/ide-taskfile.c
    @@ -146,22 +146,15 @@ static ide_startstop_t task_no_data_intr
    return ide_error(drive, "task_no_data_intr", stat);
    }

    - if (custom && tf->command == ATA_CMD_IDLEIMMEDIATE) {
    - hwif->tp_ops->tf_read(drive, cmd);
    - if (tf->lbal != 0xc4) {
    - printk(KERN_ERR "%s: head unload failed!\n",
    - drive->name);
    - ide_tf_dump(drive->name, tf);
    - } else
    - drive->dev_flags |= IDE_DFLAG_PARKED;
    - } else if (custom && tf->command == ATA_CMD_SET_MULTI)
    + if (custom && tf->command == ATA_CMD_SET_MULTI)
    drive->mult_count = drive->mult_req;

    if (custom == 0 || tf->command == ATA_CMD_IDLEIMMEDIATE) {
    struct request *rq = hwif->rq;
    u8 err = ide_read_error(drive);

    - if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE)
    + if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE ||
    + tf->command == ATA_CMD_IDLEIMMEDIATE)
    ide_complete_cmd(drive, cmd, stat, err);
    ide_complete_rq(drive, err);
    }

    \
     
     \ /
      Last update: 2009-02-02 22:45    [W:0.022 / U:90.472 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site