[SCSI] libsas: fix timeout vs completion race
[linux-2.6.git] / include / scsi / libsas.h
index bd6e89e..aa7192f 100644 (file)
@@ -164,9 +164,6 @@ enum ata_command_set {
 struct sata_device {
         enum   ata_command_set command_set;
         struct smp_resp        rps_resp; /* report_phy_sata_resp */
-        __le16 *identify_device;
-        __le16 *identify_packet_device;
-
         u8     port_no;        /* port number, if this is a PM (Port) */
         struct list_head children; /* PM Ports if this is a PM */
 
@@ -181,6 +178,7 @@ enum {
 };
 
 struct domain_device {
+       spinlock_t done_lock;
         enum sas_dev_type dev_type;
 
         enum sas_linkrate linkrate;
@@ -324,6 +322,7 @@ struct asd_sas_phy {
 struct scsi_core {
        struct Scsi_Host *shost;
 
+       struct mutex      task_queue_flush;
        spinlock_t        task_queue_lock;
        struct list_head  task_queue;
        int               task_queue_size;
@@ -340,6 +339,7 @@ enum sas_ha_state {
        SAS_HA_REGISTERED,
        SAS_HA_DRAINING,
        SAS_HA_ATA_EH_ACTIVE,
+       SAS_HA_FROZEN,
 };
 
 struct sas_ha_struct {
@@ -455,7 +455,10 @@ enum service_response {
 };
 
 enum exec_status {
-       /* The SAM_STAT_.. codes fit in the lower 6 bits */
+       /* The SAM_STAT_.. codes fit in the lower 6 bits, alias some of
+        * them here to silence 'case value not in enumerated type' warnings
+        */
+       __SAM_STAT_CHECK_CONDITION = SAM_STAT_CHECK_CONDITION,
 
        SAS_DEV_NO_RESPONSE = 0x80,
        SAS_DATA_UNDERRUN,
@@ -609,6 +612,7 @@ struct sas_domain_function_template {
        int (*lldd_clear_task_set)(struct domain_device *, u8 *lun);
        int (*lldd_I_T_nexus_reset)(struct domain_device *);
        int (*lldd_ata_soft_reset)(struct domain_device *);
+       void (*lldd_ata_set_dmamode)(struct domain_device *);
        int (*lldd_lu_reset)(struct domain_device *, u8 *lun);
        int (*lldd_query_task)(struct sas_task *);
 
@@ -664,7 +668,6 @@ void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *);
 void sas_init_dev(struct domain_device *);
 
 void sas_task_abort(struct sas_task *);
-int __sas_task_abort(struct sas_task *);
 int sas_eh_device_reset_handler(struct scsi_cmnd *cmd);
 int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd);