diff options
author | Darrick J. Wong <djwong@us.ibm.com> | 2007-01-11 14:14:55 -0800 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-01-13 16:12:39 -0600 |
commit | b218a0d8e250e0ae8fd4d4e45bd66a588b380752 (patch) | |
tree | 6c60dc11ef8d064404eb2fd6a3b4f37529a2c72f /include/scsi | |
parent | bf451207511d049189ddb0a4eae3acdb086a3c82 (diff) | |
download | linux-b218a0d8e250e0ae8fd4d4e45bd66a588b380752.tar.gz linux-b218a0d8e250e0ae8fd4d4e45bd66a588b380752.tar.bz2 linux-b218a0d8e250e0ae8fd4d4e45bd66a588b380752.zip |
[SCSI] libsas: Don't give scsi_cmnds to the EH if they never made it to the SAS LLDD or have already returned
On a system with many SAS targets, it appears possible that a scsi_cmnd
can time out without ever making it to the SAS LLDD or at the same time
that a completion is occurring. In both of these cases, telling the
LLDD to abort the sas_task makes no sense because the LLDD won't know
about the sas_task; what we really want to do is to increase the timer.
Note that this involves creating another sas_task bit to indicate
whether or not the task has been sent to the LLDD; I could have
implemented this by slightly redefining SAS_TASK_STATE_PENDING, but
this way seems cleaner.
This second version amends the aic94xx portion to set the
TASK_AT_INITIATOR flag for all sas_tasks that were passed to
lldd_execute_task.
Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/libsas.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 0c775fceb675..da96bcfb9e46 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h @@ -554,6 +554,7 @@ struct sas_task { #define SAS_TASK_STATE_DONE 2 #define SAS_TASK_STATE_ABORTED 4 #define SAS_TASK_INITIATOR_ABORTED 8 +#define SAS_TASK_AT_INITIATOR 16 static inline struct sas_task *sas_alloc_task(gfp_t flags) { |