diff options
Diffstat (limited to 'drivers/vhost/scsi.c')
| -rw-r--r-- | drivers/vhost/scsi.c | 16 | 
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index 17fcd3b2e686..76f8d649147b 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c @@ -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);  |