[SCSI] iscsi class: regression - fix races with state manipulation and blocking/unblo...
[sfrench/cifs-2.6.git] / include / scsi / scsi_transport_iscsi.h
index 0e869d9a3856ce379cf35fa37e2425dd263fb694..aab1eae2ec4c4a6d310ab79cc214d6e627ec79ea 100644 (file)
@@ -177,11 +177,14 @@ struct iscsi_cls_session {
        struct list_head host_list;
        struct iscsi_transport *transport;
        spinlock_t lock;
+       struct work_struct block_work;
+       struct work_struct unblock_work;
+       struct work_struct scan_work;
+       struct work_struct unbind_work;
 
        /* recovery fields */
        int recovery_tmo;
        struct delayed_work recovery_work;
-       struct work_struct unbind_work;
 
        int target_id;
 
@@ -202,14 +205,21 @@ struct iscsi_cls_session {
 
 struct iscsi_host {
        struct list_head sessions;
+       atomic_t nr_scans;
        struct mutex mutex;
-       struct workqueue_struct *unbind_workq;
-       char unbind_workq_name[KOBJ_NAME_LEN];
+       struct workqueue_struct *scan_workq;
+       char scan_workq_name[KOBJ_NAME_LEN];
 };
 
 /*
  * session and connection functions that can be used by HW iSCSI LLDs
  */
+#define iscsi_cls_session_printk(prefix, _cls_session, fmt, a...) \
+       dev_printk(prefix, &(_cls_session)->dev, fmt, ##a)
+
+#define iscsi_cls_conn_printk(prefix, _cls_conn, fmt, a...) \
+       dev_printk(prefix, &(_cls_conn)->dev, fmt, ##a)
+
 extern int iscsi_session_chkready(struct iscsi_cls_session *session);
 extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost,
                                        struct iscsi_transport *transport);
@@ -228,6 +238,6 @@ extern struct iscsi_cls_conn *iscsi_create_conn(struct iscsi_cls_session *sess,
 extern int iscsi_destroy_conn(struct iscsi_cls_conn *conn);
 extern void iscsi_unblock_session(struct iscsi_cls_session *session);
 extern void iscsi_block_session(struct iscsi_cls_session *session);
-
+extern int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time);
 
 #endif