These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / include / target / target_core_fabric.h
index 0f4dc37..7fb2557 100644 (file)
@@ -4,20 +4,24 @@
 struct target_core_fabric_ops {
        struct module *module;
        const char *name;
+       size_t node_acl_size;
+       /*
+        * Limits number of scatterlist entries per SCF_SCSI_DATA_CDB payload.
+        * Setting this value tells target-core to enforce this limit, and
+        * report as INQUIRY EVPD=b0 MAXIMUM TRANSFER LENGTH.
+        *
+        * target-core will currently reset se_cmd->data_length to this
+        * maximum size, and set UNDERFLOW residual count if length exceeds
+        * this limit.
+        *
+        * XXX: Not all initiator hosts honor this block-limit EVPD
+        * XXX: Currently assumes single PAGE_SIZE per scatterlist entry
+        */
+       u32 max_data_sg_nents;
        char *(*get_fabric_name)(void);
-       u8 (*get_fabric_proto_ident)(struct se_portal_group *);
        char *(*tpg_get_wwn)(struct se_portal_group *);
        u16 (*tpg_get_tag)(struct se_portal_group *);
        u32 (*tpg_get_default_depth)(struct se_portal_group *);
-       u32 (*tpg_get_pr_transport_id)(struct se_portal_group *,
-                               struct se_node_acl *,
-                               struct t10_pr_registration *, int *,
-                               unsigned char *);
-       u32 (*tpg_get_pr_transport_id_len)(struct se_portal_group *,
-                               struct se_node_acl *,
-                               struct t10_pr_registration *, int *);
-       char *(*tpg_parse_pr_out_transport_id)(struct se_portal_group *,
-                               const char *, u32 *, char **);
        int (*tpg_check_demo_mode)(struct se_portal_group *);
        int (*tpg_check_demo_mode_cache)(struct se_portal_group *);
        int (*tpg_check_demo_mode_write_protect)(struct se_portal_group *);
@@ -36,10 +40,6 @@ struct target_core_fabric_ops {
         * WRITE_STRIP and READ_INSERT operations.
         */
        int (*tpg_check_prot_fabric_only)(struct se_portal_group *);
-       struct se_node_acl *(*tpg_alloc_fabric_acl)(
-                                       struct se_portal_group *);
-       void (*tpg_release_fabric_acl)(struct se_portal_group *,
-                                       struct se_node_acl *);
        u32 (*tpg_get_inst_index)(struct se_portal_group *);
        /*
         * Optional to release struct se_cmd and fabric dependent allocated
@@ -50,7 +50,6 @@ struct target_core_fabric_ops {
         */
        int (*check_stop_free)(struct se_cmd *);
        void (*release_cmd)(struct se_cmd *);
-       void (*put_session)(struct se_session *);
        /*
         * Called with spin_lock_bh(struct se_portal_group->session_lock held.
         */
@@ -66,7 +65,6 @@ struct target_core_fabric_ops {
        int (*write_pending)(struct se_cmd *);
        int (*write_pending_status)(struct se_cmd *);
        void (*set_default_node_attributes)(struct se_node_acl *);
-       u32 (*get_task_tag)(struct se_cmd *);
        int (*get_cmd_state)(struct se_cmd *);
        int (*queue_data_in)(struct se_cmd *);
        int (*queue_status)(struct se_cmd *);
@@ -88,9 +86,8 @@ struct target_core_fabric_ops {
        struct se_tpg_np *(*fabric_make_np)(struct se_portal_group *,
                                struct config_group *, const char *);
        void (*fabric_drop_np)(struct se_tpg_np *);
-       struct se_node_acl *(*fabric_make_nodeacl)(struct se_portal_group *,
-                               struct config_group *, const char *);
-       void (*fabric_drop_nodeacl)(struct se_node_acl *);
+       int (*fabric_init_nodeacl)(struct se_node_acl *, const char *);
+       void (*fabric_cleanup_nodeacl)(struct se_node_acl *);
 
        struct configfs_attribute **tfc_discovery_attrs;
        struct configfs_attribute **tfc_wwn_attrs;
@@ -132,16 +129,16 @@ void      transport_deregister_session(struct se_session *);
 void   transport_init_se_cmd(struct se_cmd *,
                const struct target_core_fabric_ops *,
                struct se_session *, u32, int, int, unsigned char *);
-sense_reason_t transport_lookup_cmd_lun(struct se_cmd *, u32);
+sense_reason_t transport_lookup_cmd_lun(struct se_cmd *, u64);
 sense_reason_t target_setup_cmd_from_cdb(struct se_cmd *, unsigned char *);
 int    target_submit_cmd_map_sgls(struct se_cmd *, struct se_session *,
-               unsigned char *, unsigned char *, u32, u32, int, int, int,
+               unsigned char *, unsigned char *, u64, u32, int, int, int,
                struct scatterlist *, u32, struct scatterlist *, u32,
                struct scatterlist *, u32);
 int    target_submit_cmd(struct se_cmd *, struct se_session *, unsigned char *,
-               unsigned char *, u32, u32, int, int, int);
+               unsigned char *, u64, u32, int, int, int);
 int    target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess,
-               unsigned char *sense, u32 unpacked_lun,
+               unsigned char *sense, u64 unpacked_lun,
                void *fabric_tmr_ptr, unsigned char tm_type,
                gfp_t, unsigned int, int);
 int    transport_handle_cdb_direct(struct se_cmd *);
@@ -155,8 +152,8 @@ bool        transport_wait_for_tasks(struct se_cmd *);
 int    transport_check_aborted_status(struct se_cmd *, int);
 int    transport_send_check_condition_and_sense(struct se_cmd *,
                sense_reason_t, int);
-int    target_get_sess_cmd(struct se_session *, struct se_cmd *, bool);
-int    target_put_sess_cmd(struct se_session *, struct se_cmd *);
+int    target_get_sess_cmd(struct se_cmd *, bool);
+int    target_put_sess_cmd(struct se_cmd *);
 void   target_sess_cmd_list_set_waiting(struct se_session *);
 void   target_wait_for_sess_cmds(struct se_session *);
 
@@ -167,52 +164,20 @@ void      core_tmr_release_req(struct se_tmr_req *);
 int    transport_generic_handle_tmr(struct se_cmd *);
 void   transport_generic_request_failure(struct se_cmd *, sense_reason_t);
 void   __target_execute_cmd(struct se_cmd *);
-int    transport_lookup_tmr_lun(struct se_cmd *, u32);
+int    transport_lookup_tmr_lun(struct se_cmd *, u64);
+void   core_allocate_nexus_loss_ua(struct se_node_acl *acl);
 
 struct se_node_acl *core_tpg_get_initiator_node_acl(struct se_portal_group *tpg,
                unsigned char *);
 struct se_node_acl *core_tpg_check_initiator_node_acl(struct se_portal_group *,
                unsigned char *);
-void   core_tpg_clear_object_luns(struct se_portal_group *);
-struct se_node_acl *core_tpg_add_initiator_node_acl(struct se_portal_group *,
-               struct se_node_acl *, const char *, u32);
-int    core_tpg_del_initiator_node_acl(struct se_portal_group *,
-               struct se_node_acl *, int);
 int    core_tpg_set_initiator_node_queue_depth(struct se_portal_group *,
                unsigned char *, u32, int);
 int    core_tpg_set_initiator_node_tag(struct se_portal_group *,
                struct se_node_acl *, const char *);
-int    core_tpg_register(const struct target_core_fabric_ops *,
-               struct se_wwn *, struct se_portal_group *, void *, int);
+int    core_tpg_register(struct se_wwn *, struct se_portal_group *, int);
 int    core_tpg_deregister(struct se_portal_group *);
 
-/* SAS helpers */
-u8     sas_get_fabric_proto_ident(struct se_portal_group *);
-u32    sas_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *, unsigned char *);
-u32    sas_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *);
-char   *sas_parse_pr_out_transport_id(struct se_portal_group *, const char *,
-               u32 *, char **);
-
-/* FC helpers */
-u8     fc_get_fabric_proto_ident(struct se_portal_group *);
-u32    fc_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *, unsigned char *);
-u32    fc_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *);
-char   *fc_parse_pr_out_transport_id(struct se_portal_group *, const char *,
-               u32 *, char **);
-
-/* iSCSI helpers */
-u8     iscsi_get_fabric_proto_ident(struct se_portal_group *);
-u32    iscsi_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *, unsigned char *);
-u32    iscsi_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *);
-char   *iscsi_parse_pr_out_transport_id(struct se_portal_group *, const char *,
-               u32 *, char **);
-
 /*
  * The LIO target core uses DMA_TO_DEVICE to mean that data is going
  * to the target (eg handling a WRITE) and DMA_FROM_DEVICE to mean