]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/vhost/scsi.c
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[karo-tx-linux.git] / drivers / vhost / scsi.c
index 55722feeb898d12c7724bb3142ced1bf3691ee91..dfcc02c936485199c44d1545bf95b73bfe23ff97 100644 (file)
@@ -43,7 +43,6 @@
 #include <target/target_core_base.h>
 #include <target/target_core_fabric.h>
 #include <target/target_core_fabric_configfs.h>
-#include <target/target_core_configfs.h>
 #include <target/configfs_macros.h>
 #include <linux/vhost.h>
 #include <linux/virtio_scsi.h>
@@ -117,15 +116,6 @@ struct vhost_scsi_nexus {
        struct se_session *tvn_se_sess;
 };
 
-struct vhost_scsi_nacl {
-       /* Binary World Wide unique Port Name for Vhost Initiator port */
-       u64 iport_wwpn;
-       /* ASCII formatted WWPN for Sas Initiator port */
-       char iport_name[VHOST_SCSI_NAMELEN];
-       /* Returned by vhost_scsi_make_nodeacl() */
-       struct se_node_acl se_node_acl;
-};
-
 struct vhost_scsi_tpg {
        /* Vhost port target portal group tag for TCM */
        u16 tport_tpgt;
@@ -218,7 +208,6 @@ struct vhost_scsi {
        int vs_events_nr; /* num of pending events, protected by vq->mutex */
 };
 
-static struct target_core_fabric_ops vhost_scsi_ops;
 static struct workqueue_struct *vhost_scsi_workqueue;
 
 /* Global spinlock to protect vhost_scsi TPG list for vhost IOCTL access */
@@ -299,28 +288,6 @@ static char *vhost_scsi_get_fabric_name(void)
        return "vhost";
 }
 
-static u8 vhost_scsi_get_fabric_proto_ident(struct se_portal_group *se_tpg)
-{
-       struct vhost_scsi_tpg *tpg = container_of(se_tpg,
-                               struct vhost_scsi_tpg, se_tpg);
-       struct vhost_scsi_tport *tport = tpg->tport;
-
-       switch (tport->tport_proto_id) {
-       case SCSI_PROTOCOL_SAS:
-               return sas_get_fabric_proto_ident(se_tpg);
-       case SCSI_PROTOCOL_FCP:
-               return fc_get_fabric_proto_ident(se_tpg);
-       case SCSI_PROTOCOL_ISCSI:
-               return iscsi_get_fabric_proto_ident(se_tpg);
-       default:
-               pr_err("Unknown tport_proto_id: 0x%02x, using"
-                       " SAS emulation\n", tport->tport_proto_id);
-               break;
-       }
-
-       return sas_get_fabric_proto_ident(se_tpg);
-}
-
 static char *vhost_scsi_get_fabric_wwn(struct se_portal_group *se_tpg)
 {
        struct vhost_scsi_tpg *tpg = container_of(se_tpg,
@@ -337,102 +304,6 @@ static u16 vhost_scsi_get_tpgt(struct se_portal_group *se_tpg)
        return tpg->tport_tpgt;
 }
 
-static u32 vhost_scsi_get_default_depth(struct se_portal_group *se_tpg)
-{
-       return 1;
-}
-
-static u32
-vhost_scsi_get_pr_transport_id(struct se_portal_group *se_tpg,
-                             struct se_node_acl *se_nacl,
-                             struct t10_pr_registration *pr_reg,
-                             int *format_code,
-                             unsigned char *buf)
-{
-       struct vhost_scsi_tpg *tpg = container_of(se_tpg,
-                               struct vhost_scsi_tpg, se_tpg);
-       struct vhost_scsi_tport *tport = tpg->tport;
-
-       switch (tport->tport_proto_id) {
-       case SCSI_PROTOCOL_SAS:
-               return sas_get_pr_transport_id(se_tpg, se_nacl, pr_reg,
-                                       format_code, buf);
-       case SCSI_PROTOCOL_FCP:
-               return fc_get_pr_transport_id(se_tpg, se_nacl, pr_reg,
-                                       format_code, buf);
-       case SCSI_PROTOCOL_ISCSI:
-               return iscsi_get_pr_transport_id(se_tpg, se_nacl, pr_reg,
-                                       format_code, buf);
-       default:
-               pr_err("Unknown tport_proto_id: 0x%02x, using"
-                       " SAS emulation\n", tport->tport_proto_id);
-               break;
-       }
-
-       return sas_get_pr_transport_id(se_tpg, se_nacl, pr_reg,
-                       format_code, buf);
-}
-
-static u32
-vhost_scsi_get_pr_transport_id_len(struct se_portal_group *se_tpg,
-                                 struct se_node_acl *se_nacl,
-                                 struct t10_pr_registration *pr_reg,
-                                 int *format_code)
-{
-       struct vhost_scsi_tpg *tpg = container_of(se_tpg,
-                               struct vhost_scsi_tpg, se_tpg);
-       struct vhost_scsi_tport *tport = tpg->tport;
-
-       switch (tport->tport_proto_id) {
-       case SCSI_PROTOCOL_SAS:
-               return sas_get_pr_transport_id_len(se_tpg, se_nacl, pr_reg,
-                                       format_code);
-       case SCSI_PROTOCOL_FCP:
-               return fc_get_pr_transport_id_len(se_tpg, se_nacl, pr_reg,
-                                       format_code);
-       case SCSI_PROTOCOL_ISCSI:
-               return iscsi_get_pr_transport_id_len(se_tpg, se_nacl, pr_reg,
-                                       format_code);
-       default:
-               pr_err("Unknown tport_proto_id: 0x%02x, using"
-                       " SAS emulation\n", tport->tport_proto_id);
-               break;
-       }
-
-       return sas_get_pr_transport_id_len(se_tpg, se_nacl, pr_reg,
-                       format_code);
-}
-
-static char *
-vhost_scsi_parse_pr_out_transport_id(struct se_portal_group *se_tpg,
-                                   const char *buf,
-                                   u32 *out_tid_len,
-                                   char **port_nexus_ptr)
-{
-       struct vhost_scsi_tpg *tpg = container_of(se_tpg,
-                               struct vhost_scsi_tpg, se_tpg);
-       struct vhost_scsi_tport *tport = tpg->tport;
-
-       switch (tport->tport_proto_id) {
-       case SCSI_PROTOCOL_SAS:
-               return sas_parse_pr_out_transport_id(se_tpg, buf, out_tid_len,
-                                       port_nexus_ptr);
-       case SCSI_PROTOCOL_FCP:
-               return fc_parse_pr_out_transport_id(se_tpg, buf, out_tid_len,
-                                       port_nexus_ptr);
-       case SCSI_PROTOCOL_ISCSI:
-               return iscsi_parse_pr_out_transport_id(se_tpg, buf, out_tid_len,
-                                       port_nexus_ptr);
-       default:
-               pr_err("Unknown tport_proto_id: 0x%02x, using"
-                       " SAS emulation\n", tport->tport_proto_id);
-               break;
-       }
-
-       return sas_parse_pr_out_transport_id(se_tpg, buf, out_tid_len,
-                       port_nexus_ptr);
-}
-
 static int vhost_scsi_check_prot_fabric_only(struct se_portal_group *se_tpg)
 {
        struct vhost_scsi_tpg *tpg = container_of(se_tpg,
@@ -441,29 +312,6 @@ static int vhost_scsi_check_prot_fabric_only(struct se_portal_group *se_tpg)
        return tpg->tv_fabric_prot_type;
 }
 
-static struct se_node_acl *
-vhost_scsi_alloc_fabric_acl(struct se_portal_group *se_tpg)
-{
-       struct vhost_scsi_nacl *nacl;
-
-       nacl = kzalloc(sizeof(struct vhost_scsi_nacl), GFP_KERNEL);
-       if (!nacl) {
-               pr_err("Unable to allocate struct vhost_scsi_nacl\n");
-               return NULL;
-       }
-
-       return &nacl->se_node_acl;
-}
-
-static void
-vhost_scsi_release_fabric_acl(struct se_portal_group *se_tpg,
-                            struct se_node_acl *se_nacl)
-{
-       struct vhost_scsi_nacl *nacl = container_of(se_nacl,
-                       struct vhost_scsi_nacl, se_node_acl);
-       kfree(nacl);
-}
-
 static u32 vhost_scsi_tpg_get_inst_index(struct se_portal_group *se_tpg)
 {
        return 1;
@@ -521,11 +369,6 @@ static void vhost_scsi_set_default_node_attrs(struct se_node_acl *nacl)
        return;
 }
 
-static u32 vhost_scsi_get_task_tag(struct se_cmd *se_cmd)
-{
-       return 0;
-}
-
 static int vhost_scsi_get_cmd_state(struct se_cmd *se_cmd)
 {
        return 0;
@@ -609,7 +452,7 @@ static void vhost_scsi_free_cmd(struct vhost_scsi_cmd *cmd)
 
 static int vhost_scsi_check_stop_free(struct se_cmd *se_cmd)
 {
-       return target_put_sess_cmd(se_cmd->se_sess, se_cmd);
+       return target_put_sess_cmd(se_cmd);
 }
 
 static void
@@ -970,6 +813,7 @@ static void vhost_scsi_submission_work(struct work_struct *work)
        }
        tv_nexus = cmd->tvc_nexus;
 
+       se_cmd->tag = 0;
        rc = target_submit_cmd_map_sgls(se_cmd, tv_nexus->tvn_se_sess,
                        cmd->tvc_cdb, &cmd->tvc_sense_buf[0],
                        cmd->tvc_lun, cmd->tvc_exp_data_len,
@@ -1824,50 +1668,6 @@ static void vhost_scsi_port_unlink(struct se_portal_group *se_tpg,
        mutex_unlock(&vhost_scsi_mutex);
 }
 
-static struct se_node_acl *
-vhost_scsi_make_nodeacl(struct se_portal_group *se_tpg,
-                      struct config_group *group,
-                      const char *name)
-{
-       struct se_node_acl *se_nacl, *se_nacl_new;
-       struct vhost_scsi_nacl *nacl;
-       u64 wwpn = 0;
-       u32 nexus_depth;
-
-       /* vhost_scsi_parse_wwn(name, &wwpn, 1) < 0)
-               return ERR_PTR(-EINVAL); */
-       se_nacl_new = vhost_scsi_alloc_fabric_acl(se_tpg);
-       if (!se_nacl_new)
-               return ERR_PTR(-ENOMEM);
-
-       nexus_depth = 1;
-       /*
-        * se_nacl_new may be released by core_tpg_add_initiator_node_acl()
-        * when converting a NodeACL from demo mode -> explict
-        */
-       se_nacl = core_tpg_add_initiator_node_acl(se_tpg, se_nacl_new,
-                               name, nexus_depth);
-       if (IS_ERR(se_nacl)) {
-               vhost_scsi_release_fabric_acl(se_tpg, se_nacl_new);
-               return se_nacl;
-       }
-       /*
-        * Locate our struct vhost_scsi_nacl and set the FC Nport WWPN
-        */
-       nacl = container_of(se_nacl, struct vhost_scsi_nacl, se_node_acl);
-       nacl->iport_wwpn = wwpn;
-
-       return se_nacl;
-}
-
-static void vhost_scsi_drop_nodeacl(struct se_node_acl *se_acl)
-{
-       struct vhost_scsi_nacl *nacl = container_of(se_acl,
-                               struct vhost_scsi_nacl, se_node_acl);
-       core_tpg_del_initiator_node_acl(se_acl->se_tpg, se_acl, 1);
-       kfree(nacl);
-}
-
 static void vhost_scsi_free_cmd_map_res(struct vhost_scsi_nexus *nexus,
                                       struct se_session *se_sess)
 {
@@ -2202,8 +2002,7 @@ vhost_scsi_make_tpg(struct se_wwn *wwn,
        tpg->tport = tport;
        tpg->tport_tpgt = tpgt;
 
-       ret = core_tpg_register(&vhost_scsi_ops, wwn,
-                               &tpg->se_tpg, tpg, TRANSPORT_TPG_TYPE_NORMAL);
+       ret = core_tpg_register(wwn, &tpg->se_tpg, tport->tport_proto_id);
        if (ret < 0) {
                kfree(tpg);
                return NULL;
@@ -2327,20 +2126,13 @@ static struct target_core_fabric_ops vhost_scsi_ops = {
        .module                         = THIS_MODULE,
        .name                           = "vhost",
        .get_fabric_name                = vhost_scsi_get_fabric_name,
-       .get_fabric_proto_ident         = vhost_scsi_get_fabric_proto_ident,
        .tpg_get_wwn                    = vhost_scsi_get_fabric_wwn,
        .tpg_get_tag                    = vhost_scsi_get_tpgt,
-       .tpg_get_default_depth          = vhost_scsi_get_default_depth,
-       .tpg_get_pr_transport_id        = vhost_scsi_get_pr_transport_id,
-       .tpg_get_pr_transport_id_len    = vhost_scsi_get_pr_transport_id_len,
-       .tpg_parse_pr_out_transport_id  = vhost_scsi_parse_pr_out_transport_id,
        .tpg_check_demo_mode            = vhost_scsi_check_true,
        .tpg_check_demo_mode_cache      = vhost_scsi_check_true,
        .tpg_check_demo_mode_write_protect = vhost_scsi_check_false,
        .tpg_check_prod_mode_write_protect = vhost_scsi_check_false,
        .tpg_check_prot_fabric_only     = vhost_scsi_check_prot_fabric_only,
-       .tpg_alloc_fabric_acl           = vhost_scsi_alloc_fabric_acl,
-       .tpg_release_fabric_acl         = vhost_scsi_release_fabric_acl,
        .tpg_get_inst_index             = vhost_scsi_tpg_get_inst_index,
        .release_cmd                    = vhost_scsi_release_cmd,
        .check_stop_free                = vhost_scsi_check_stop_free,
@@ -2351,7 +2143,6 @@ static struct target_core_fabric_ops vhost_scsi_ops = {
        .write_pending                  = vhost_scsi_write_pending,
        .write_pending_status           = vhost_scsi_write_pending_status,
        .set_default_node_attributes    = vhost_scsi_set_default_node_attrs,
-       .get_task_tag                   = vhost_scsi_get_task_tag,
        .get_cmd_state                  = vhost_scsi_get_cmd_state,
        .queue_data_in                  = vhost_scsi_queue_data_in,
        .queue_status                   = vhost_scsi_queue_status,
@@ -2366,10 +2157,6 @@ static struct target_core_fabric_ops vhost_scsi_ops = {
        .fabric_drop_tpg                = vhost_scsi_drop_tpg,
        .fabric_post_link               = vhost_scsi_port_link,
        .fabric_pre_unlink              = vhost_scsi_port_unlink,
-       .fabric_make_np                 = NULL,
-       .fabric_drop_np                 = NULL,
-       .fabric_make_nodeacl            = vhost_scsi_make_nodeacl,
-       .fabric_drop_nodeacl            = vhost_scsi_drop_nodeacl,
 
        .tfc_wwn_attrs                  = vhost_scsi_wwn_attrs,
        .tfc_tpg_base_attrs             = vhost_scsi_tpg_attrs,