x86: fix clflush_page_range logic
[sfrench/cifs-2.6.git] / include / scsi / scsi_transport_iscsi.h
index e962c5357eef2cb3507e7c78b6155322c8530bdd..404f11d331d6e767711a86e860013e63f88b8611 100644 (file)
@@ -24,6 +24,8 @@
 #define SCSI_TRANSPORT_ISCSI_H
 
 #include <linux/device.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
 #include <scsi/iscsi_if.h>
 
 struct scsi_transport_template;
@@ -90,7 +92,8 @@ struct iscsi_transport {
        unsigned int max_conn;
        unsigned int max_cmd_len;
        struct iscsi_cls_session *(*create_session) (struct iscsi_transport *it,
-               struct scsi_transport_template *t, uint32_t sn, uint32_t *hn);
+               struct scsi_transport_template *t, uint16_t, uint16_t,
+               uint32_t sn, uint32_t *hn);
        void (*destroy_session) (struct iscsi_cls_session *session);
        struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess,
                                uint32_t cid);
@@ -108,14 +111,16 @@ struct iscsi_transport {
                                  enum iscsi_param param, char *buf);
        int (*get_host_param) (struct Scsi_Host *shost,
                                enum iscsi_host_param param, char *buf);
+       int (*set_host_param) (struct Scsi_Host *shost,
+                              enum iscsi_host_param param, char *buf,
+                              int buflen);
        int (*send_pdu) (struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
                         char *data, uint32_t data_size);
        void (*get_stats) (struct iscsi_cls_conn *conn,
                           struct iscsi_stats *stats);
-       void (*init_cmd_task) (struct iscsi_cmd_task *ctask);
+       int (*init_cmd_task) (struct iscsi_cmd_task *ctask);
        void (*init_mgmt_task) (struct iscsi_conn *conn,
-                               struct iscsi_mgmt_task *mtask,
-                               char *data, uint32_t data_size);
+                               struct iscsi_mgmt_task *mtask);
        int (*xmit_cmd_task) (struct iscsi_conn *conn,
                              struct iscsi_cmd_task *ctask);
        void (*cleanup_cmd_task) (struct iscsi_conn *conn,
@@ -127,7 +132,7 @@ struct iscsi_transport {
                           uint64_t *ep_handle);
        int (*ep_poll) (uint64_t ep_handle, int timeout_ms);
        void (*ep_disconnect) (uint64_t ep_handle);
-       int (*tgt_dscvr) (enum iscsi_tgt_dscvr type, uint32_t host_no,
+       int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type,
                          uint32_t enable, struct sockaddr *dst_addr);
 };
 
@@ -171,6 +176,7 @@ struct iscsi_cls_conn {
 #define ISCSI_STATE_TERMINATE          4
 #define ISCSI_STATE_IN_RECOVERY                5
 #define ISCSI_STATE_RECOVERY_FAILED    6
+#define ISCSI_STATE_LOGGING_OUT                7
 
 struct iscsi_cls_session {
        struct list_head sess_list;             /* item in session_list */
@@ -180,6 +186,7 @@ struct iscsi_cls_session {
        /* recovery fields */
        int recovery_tmo;
        struct delayed_work recovery_work;
+       struct work_struct unbind_work;
 
        int target_id;
 
@@ -200,6 +207,8 @@ struct iscsi_cls_session {
 struct iscsi_host {
        struct list_head sessions;
        struct mutex mutex;
+       struct workqueue_struct *unbind_workq;
+       char unbind_workq_name[KOBJ_NAME_LEN];
 };
 
 /*
@@ -209,8 +218,8 @@ extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost,
                                        struct iscsi_transport *transport);
 extern int iscsi_add_session(struct iscsi_cls_session *session,
                             unsigned int target_id);
-extern int iscsi_if_create_session_done(struct iscsi_cls_conn *conn);
-extern int iscsi_if_destroy_session_done(struct iscsi_cls_conn *conn);
+extern int iscsi_session_event(struct iscsi_cls_session *session,
+                              enum iscsi_uevent_e event);
 extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost,
                                                struct iscsi_transport *t,
                                                unsigned int target_id);