]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/scsi/libsas.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
[karo-tx-linux.git] / include / scsi / libsas.h
index 75df71f08ce18cbe07fe7c5b6791cbdd00ab7da3..ad0182ef7809bba62450e4788dfb658fd601ce8d 100644 (file)
@@ -323,12 +323,20 @@ struct sas_ha_event {
        struct sas_ha_struct *ha;
 };
 
+enum sas_ha_state {
+       SAS_HA_REGISTERED,
+       SAS_HA_UNREGISTERED
+};
+
 struct sas_ha_struct {
 /* private: */
        spinlock_t       event_lock;
        struct sas_ha_event ha_events[HA_NUM_EVENTS];
        unsigned long    pending;
 
+       enum sas_ha_state state;
+       spinlock_t        state_lock;
+
        struct scsi_core core;
 
 /* public: */
@@ -559,10 +567,9 @@ struct sas_task {
 static inline struct sas_task *sas_alloc_task(gfp_t flags)
 {
        extern struct kmem_cache *sas_task_cache;
-       struct sas_task *task = kmem_cache_alloc(sas_task_cache, flags);
+       struct sas_task *task = kmem_cache_zalloc(sas_task_cache, flags);
 
        if (task) {
-               memset(task, 0, sizeof(*task));
                INIT_LIST_HEAD(&task->list);
                spin_lock_init(&task->task_state_lock);
                task->task_state_flags = SAS_TASK_STATE_PENDING;
@@ -650,6 +657,9 @@ void sas_unregister_dev(struct domain_device *);
 
 void sas_init_dev(struct domain_device *);
 
-void sas_task_abort(struct work_struct *);
+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);
 
 #endif /* _SASLIB_H_ */