lkml.org 
[lkml]   [2005]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.12-mm1

    On 06.20, Andrew Morton wrote:
    >
    > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.12/2.6.12-mm1/
    >
    >
    > - Someone broke /proc/device-tree on ppc64. It's being looked into.
    >
    > - Nothing particularly special here - various fixes and updates.
    >

    I had this in my kernel, compiled from lkml ans supposed to fix some brakage
    realted to slab management in libata. Is still needed ?

    --- linux-2.6.11.orig/drivers/scsi/libata-core.c
    +++ linux-2.6.11/drivers/scsi/libata-core.c
    @@ -41,6 +41,7 @@
    #include <scsi/scsi.h>
    #include "scsi.h"
    #include "scsi_priv.h"
    +#include "scsi_logging.h"
    #include <scsi/scsi_host.h>
    #include <linux/libata.h>
    #include <asm/io.h>
    @@ -2833,6 +2834,11 @@ static void atapi_request_sense(struct a
    DPRINTK("EXIT\n");
    }

    +void ata_qc_timeout_done(struct scsi_cmnd *scmd)
    +{
    + return;
    +}
    +
    /**
    * ata_qc_timeout - Handle timeout of queued command
    * @qc: Command that timed out
    @@ -2865,17 +2871,16 @@ static void ata_qc_timeout(struct ata_qu
    struct scsi_cmnd *cmd = qc->scsicmd;

    if (!scsi_eh_eflags_chk(cmd, SCSI_EH_CANCEL_CMD)) {
    -
    /* finish completing original command */
    + qc->scsidone = ata_qc_timeout_done;
    +
    __ata_qc_complete(qc);

    atapi_request_sense(ap, dev, cmd);

    cmd->result = (CHECK_CONDITION << 1) | (DID_OK << 16);
    - scsi_finish_command(cmd);
    -
    - goto out;
    }
    + goto out;
    }

    /* hack alert! We cannot use the supplied completion
    --- linux-2.6.11.orig/drivers/scsi/libata-scsi.c
    +++ linux-2.6.11/drivers/scsi/libata-scsi.c
    @@ -380,12 +380,6 @@ int ata_scsi_error(struct Scsi_Host *hos
    ap = (struct ata_port *) &host->hostdata[0];
    ap->ops->eng_timeout(ap);

    - /* TODO: this is per-command; when queueing is supported
    - * this code will either change or move to a more
    - * appropriate place
    - */
    - host->host_failed--;
    -
    DPRINTK("EXIT\n");
    return 0;
    }
    --- linux-2.6.11.orig/drivers/scsi/scsi_error.c
    +++ linux-2.6.11/drivers/scsi/scsi_error.c
    @@ -1606,6 +1606,40 @@ static void scsi_unjam_host(struct Scsi_
    scsi_eh_flush_done_q(&eh_done_q);
    }

    +static void scsi_invoke_strategy_handler(struct Scsi_Host *shost)
    +{
    + int rtn;
    + struct list_head *lh, *lh_sf;
    + struct scsi_cmnd *scmd;
    + unsigned long flags;
    + LIST_HEAD(eh_work_q);
    + LIST_HEAD(eh_done_q);
    +
    + rtn = shost->hostt->eh_strategy_handler(shost);
    +
    + spin_lock_irqsave(shost->host_lock, flags);
    + list_splice_init(&shost->eh_cmd_q, &eh_work_q);
    + spin_unlock_irqrestore(shost->host_lock, flags);
    +
    + SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
    +
    + list_for_each_safe(lh, lh_sf, &eh_work_q) {
    + scmd = list_entry(lh, struct scsi_cmnd, eh_entry);
    +
    + if (scsi_eh_eflags_chk(scmd, SCSI_EH_CANCEL_CMD) ||
    + !SCSI_SENSE_VALID(scmd))
    + continue;
    + scmd->retries = scmd->allowed;
    + scsi_eh_finish_cmd(scmd, &eh_done_q);
    + }
    +
    + if (!list_empty(&eh_work_q))
    + if (!scsi_eh_abort_cmds(&eh_work_q, &eh_done_q))
    + scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
    +
    + scsi_eh_flush_done_q(&eh_done_q);
    +}
    +
    /**
    * scsi_error_handler - Handle errors/timeouts of SCSI cmds.
    * @data: Host for which we are running.
    @@ -1620,7 +1654,6 @@ static void scsi_unjam_host(struct Scsi_
    int scsi_error_handler(void *data)
    {
    struct Scsi_Host *shost = (struct Scsi_Host *) data;
    - int rtn;
    DECLARE_MUTEX_LOCKED(sem);

    /*
    @@ -1676,8 +1709,8 @@ int scsi_error_handler(void *data)
    * what we need to do to get it up and online again (if we can).
    * If we fail, we end up taking the thing offline.
    */
    - if (shost->hostt->eh_strategy_handler)
    - rtn = shost->hostt->eh_strategy_handler(shost);
    + if (shost->hostt->eh_strategy_handler)
    + scsi_invoke_strategy_handler(shost);
    else
    scsi_unjam_host(shost);

    --
    J.A. Magallon <jamagallon()able!es> \ Software is like sex:
    werewolf!able!es \ It's better when it's free
    Mandriva Linux release 2006.0 (Cooker) for i586
    Linux 2.6.12-jam1 (gcc 4.0.1 (4.0.1-0.2mdk for Mandriva Linux release 2006.0))


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-06-20 13:45    [W:0.027 / U:33.596 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site