]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/vhost/scsi.c
Merge tag 'dmaengine-4.19-rc1' of git://git.infradead.org/users/vkoul/slave-dma
[linux.git] / drivers / vhost / scsi.c
index 17fcd3b2e68668ec12e51680dde8a04673979555..76f8d649147b53af26ab8fc0a696efc3907bd647 100644 (file)
@@ -46,7 +46,6 @@
 #include <linux/virtio_scsi.h>
 #include <linux/llist.h>
 #include <linux/bitmap.h>
-#include <linux/percpu_ida.h>
 
 #include "vhost.h"
 
@@ -324,7 +323,7 @@ static void vhost_scsi_release_cmd(struct se_cmd *se_cmd)
        }
 
        vhost_scsi_put_inflight(tv_cmd->inflight);
-       percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
+       target_free_tag(se_sess, se_cmd);
 }
 
 static u32 vhost_scsi_sess_get_index(struct se_session *se_sess)
@@ -567,7 +566,7 @@ vhost_scsi_get_tag(struct vhost_virtqueue *vq, struct vhost_scsi_tpg *tpg,
        struct se_session *se_sess;
        struct scatterlist *sg, *prot_sg;
        struct page **pages;
-       int tag;
+       int tag, cpu;
 
        tv_nexus = tpg->tpg_nexus;
        if (!tv_nexus) {
@@ -576,7 +575,7 @@ vhost_scsi_get_tag(struct vhost_virtqueue *vq, struct vhost_scsi_tpg *tpg,
        }
        se_sess = tv_nexus->tvn_se_sess;
 
-       tag = percpu_ida_alloc(&se_sess->sess_tag_pool, TASK_RUNNING);
+       tag = sbitmap_queue_get(&se_sess->sess_tag_pool, &cpu);
        if (tag < 0) {
                pr_err("Unable to obtain tag for vhost_scsi_cmd\n");
                return ERR_PTR(-ENOMEM);
@@ -591,6 +590,7 @@ vhost_scsi_get_tag(struct vhost_virtqueue *vq, struct vhost_scsi_tpg *tpg,
        cmd->tvc_prot_sgl = prot_sg;
        cmd->tvc_upages = pages;
        cmd->tvc_se_cmd.map_tag = tag;
+       cmd->tvc_se_cmd.map_cpu = cpu;
        cmd->tvc_tag = scsi_tag;
        cmd->tvc_lun = lun;
        cmd->tvc_task_attr = task_attr;
@@ -1738,7 +1738,7 @@ static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
         * struct se_node_acl for the vhost_scsi struct se_portal_group with
         * the SCSI Initiator port name of the passed configfs group 'name'.
         */
-       tv_nexus->tvn_se_sess = target_alloc_session(&tpg->se_tpg,
+       tv_nexus->tvn_se_sess = target_setup_session(&tpg->se_tpg,
                                        VHOST_SCSI_DEFAULT_TAGS,
                                        sizeof(struct vhost_scsi_cmd),
                                        TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS,
@@ -1797,7 +1797,7 @@ static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg)
        /*
         * Release the SCSI I_T Nexus to the emulated vhost Target Port
         */
-       transport_deregister_session(tv_nexus->tvn_se_sess);
+       target_remove_session(se_sess);
        tpg->tpg_nexus = NULL;
        mutex_unlock(&tpg->tv_tpg_mutex);
 
@@ -1912,9 +1912,7 @@ static struct configfs_attribute *vhost_scsi_tpg_attrs[] = {
 };
 
 static struct se_portal_group *
-vhost_scsi_make_tpg(struct se_wwn *wwn,
-                  struct config_group *group,
-                  const char *name)
+vhost_scsi_make_tpg(struct se_wwn *wwn, const char *name)
 {
        struct vhost_scsi_tport *tport = container_of(wwn,
                        struct vhost_scsi_tport, tport_wwn);