Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-block.git] / drivers / xen / xen-scsiback.c
index e2f3e8b0fba9ff160a7c82a37e64cf5fe0b3c8f0..14a3d4cbc2a78fb6d6c568aa7484b70048a70605 100644 (file)
@@ -654,9 +654,9 @@ static struct vscsibk_pend *scsiback_get_pend_req(struct vscsiif_back_ring *ring
        struct scsiback_nexus *nexus = tpg->tpg_nexus;
        struct se_session *se_sess = nexus->tvn_se_sess;
        struct vscsibk_pend *req;
-       int tag, i;
+       int tag, cpu, i;
 
-       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 vscsiif_request\n");
                return ERR_PTR(-ENOMEM);
@@ -665,6 +665,7 @@ static struct vscsibk_pend *scsiback_get_pend_req(struct vscsiif_back_ring *ring
        req = &((struct vscsibk_pend *)se_sess->sess_cmd_map)[tag];
        memset(req, 0, sizeof(*req));
        req->se_cmd.map_tag = tag;
+       req->se_cmd.map_cpu = cpu;
 
        for (i = 0; i < VSCSI_MAX_GRANTS; i++)
                req->grant_handles[i] = SCSIBACK_INVALID_HANDLE;
@@ -1387,9 +1388,7 @@ static int scsiback_check_stop_free(struct se_cmd *se_cmd)
 
 static void scsiback_release_cmd(struct se_cmd *se_cmd)
 {
-       struct se_session *se_sess = se_cmd->se_sess;
-
-       percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
+       target_free_tag(se_cmd->se_sess, se_cmd);
 }
 
 static u32 scsiback_sess_get_index(struct se_session *se_sess)
@@ -1532,7 +1531,7 @@ static int scsiback_make_nexus(struct scsiback_tpg *tpg,
                goto out_unlock;
        }
 
-       tv_nexus->tvn_se_sess = target_alloc_session(&tpg->se_tpg,
+       tv_nexus->tvn_se_sess = target_setup_session(&tpg->se_tpg,
                                                     VSCSI_DEFAULT_SESSION_TAGS,
                                                     sizeof(struct vscsibk_pend),
                                                     TARGET_PROT_NORMAL, name,
@@ -1587,7 +1586,7 @@ static int scsiback_drop_nexus(struct scsiback_tpg *tpg)
        /*
         * Release the SCSI I_T Nexus to the emulated xen-pvscsi 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);
 
@@ -1743,9 +1742,7 @@ static void scsiback_port_unlink(struct se_portal_group *se_tpg,
 }
 
 static struct se_portal_group *
-scsiback_make_tpg(struct se_wwn *wwn,
-                  struct config_group *group,
-                  const char *name)
+scsiback_make_tpg(struct se_wwn *wwn, const char *name)
 {
        struct scsiback_tport *tport = container_of(wwn,
                        struct scsiback_tport, tport_wwn);