Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=24d6f2b50bd34d0da540a9e6f71c4b6ab25f4b93
Commit:     24d6f2b50bd34d0da540a9e6f71c4b6ab25f4b93
Parent:     b0692dd4d7e90ce5cf1241731c6e80118402e3b4
Author:     Brian King <[EMAIL PROTECTED]>
AuthorDate: Thu Mar 29 12:43:17 2007 -0500
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Sun Apr 1 11:17:22 2007 -0500

    [SCSI] ipr: Fix for oops following SATA request sense
    
    This patch fixes a problem discovered on a system with some
    bad SATA devices attached. If a command to a SATAPI device
    times out and the device gets reset as part of error recovery,
    its possible that ipr will set err_mask to indicate a device
    error has occurred. If this happens, a request sense will get
    issued by libata. Since scsi core thinks this scsi command is
    now completed, because the device reset handler completed successfully,
    scsi core will free the associated scsi command, which may
    cause an oops when that request sense is completed later
    by ipr. This patch ensures that any commands that get aborted
    as a result of a device reset set err_mask appropriately so
    that the request sense does not get sent.
    
    Signed-off-by: Brian King <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/ipr.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 44ce9f5..fc1171c 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -3846,6 +3846,8 @@ static int __ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
                if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) {
                        if (ipr_cmd->scsi_cmd)
                                ipr_cmd->done = ipr_scsi_eh_done;
+                       if (ipr_cmd->qc)
+                               ipr_cmd->done = ipr_sata_eh_done;
                        if (ipr_cmd->qc && !(ipr_cmd->qc->flags & 
ATA_QCFLAG_FAILED)) {
                                ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT;
                                ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to