Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=02cd743bb3a37f27681c487608fb819493fa4010
Commit:     02cd743bb3a37f27681c487608fb819493fa4010
Parent:     6b0efb8516a5298e12033df61f9e0c376a306adb
Author:     Darrick J. Wong <[EMAIL PROTECTED]>
AuthorDate: Thu Jan 11 14:15:46 2007 -0800
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Sat Jan 13 16:23:40 2007 -0600

    [SCSI] libsas: Start I_T recovery if ABORT TASK fails
    
    The EH should fall into I_T recovery (and potentially stronger
    remedies) if ABORT TASK fails.
    
    Signed-off-by: Alexis Bruemmer <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/libsas/sas_scsi_host.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/libsas/sas_scsi_host.c 
b/drivers/scsi/libsas/sas_scsi_host.c
index 8a1b98e..9ffe760 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -281,6 +281,7 @@ enum task_disposition {
        TASK_IS_ABORTED,
        TASK_IS_AT_LU,
        TASK_IS_NOT_AT_LU,
+       TASK_ABORT_FAILED,
 };
 
 static enum task_disposition sas_scsi_find_task(struct sas_task *task)
@@ -331,15 +332,21 @@ static enum task_disposition sas_scsi_find_task(struct 
sas_task *task)
                        SAS_DPRINTK("%s: querying task 0x%p\n",
                                    __FUNCTION__, task);
                        res = si->dft->lldd_query_task(task);
-                       if (res == TMF_RESP_FUNC_SUCC) {
+                       switch (res) {
+                       case TMF_RESP_FUNC_SUCC:
                                SAS_DPRINTK("%s: task 0x%p at LU\n",
                                            __FUNCTION__, task);
                                return TASK_IS_AT_LU;
-                       } else if (res == TMF_RESP_FUNC_COMPLETE) {
+                       case TMF_RESP_FUNC_COMPLETE:
                                SAS_DPRINTK("%s: task 0x%p not at LU\n",
                                            __FUNCTION__, task);
                                return TASK_IS_NOT_AT_LU;
-                       }
+                       case TMF_RESP_FUNC_FAILED:
+                                SAS_DPRINTK("%s: task 0x%p failed to abort\n",
+                                                __FUNCTION__, task);
+                                return TASK_ABORT_FAILED;
+                        }
+
                }
        }
        return res;
@@ -475,6 +482,7 @@ Again:
                        }
                        /* fallthrough */
                case TASK_IS_NOT_AT_LU:
+               case TASK_ABORT_FAILED:
                        SAS_DPRINTK("task 0x%p is not at LU: I_T recover\n",
                                    task);
                        tmf_resp = sas_recover_I_T(task->dev);
-
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