Lines Matching refs:tpg
217 struct vhost_scsi_tpg *tpg;
314 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
316 struct vhost_scsi_tport *tport = tpg->tport;
323 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
325 return tpg->tport_tpgt;
330 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
333 return tpg->tv_fabric_prot_type;
365 struct vhost_scsi_tpg *tpg = tmf->tpg;
368 mutex_lock(&tpg->tv_tpg_mutex);
369 list_add_tail(&tpg->tmf_queue, &tmf->queue_entry);
370 mutex_unlock(&tpg->tv_tpg_mutex);
599 vhost_scsi_get_cmd(struct vhost_virtqueue *vq, struct vhost_scsi_tpg *tpg,
611 tv_nexus = tpg->tpg_nexus;
922 struct vhost_scsi_tpg **vs_tpg, *tpg;
926 tpg = READ_ONCE(vs_tpg[*vc->target]);
927 if (unlikely(!tpg)) {
931 *tpgp = tpg;
947 struct vhost_scsi_tpg **vs_tpg, *tpg;
1005 ret = vhost_scsi_get_req(vq, &vc, &tpg);
1102 cmd = vhost_scsi_get_cmd(vq, tpg, cdb, tag, lun, task_attr,
1199 vhost_scsi_handle_tmf(struct vhost_scsi *vs, struct vhost_scsi_tpg *tpg,
1212 if (!tpg->tpg_nexus || !tpg->tpg_nexus->tvn_se_sess) {
1217 mutex_lock(&tpg->tv_tpg_mutex);
1218 if (list_empty(&tpg->tmf_queue)) {
1220 mutex_unlock(&tpg->tv_tpg_mutex);
1224 tmf = list_first_entry(&tpg->tmf_queue, struct vhost_scsi_tmf,
1227 mutex_unlock(&tpg->tv_tpg_mutex);
1229 tmf->tpg = tpg;
1237 if (target_submit_tmr(&tmf->se_cmd, tpg->tpg_nexus->tvn_se_sess, NULL,
1277 struct vhost_scsi_tpg *tpg;
1359 ret = vhost_scsi_get_req(vq, &vc, &tpg);
1364 vhost_scsi_handle_tmf(vs, tpg, vq, &v_req.tmf, &vc);
1395 struct vhost_scsi_tpg *tpg,
1406 if (tpg && lun) {
1413 evt->event.lun[1] = tpg->tport_tpgt;
1563 * vhost_scsi_mutex -> vs->dev.mutex -> tpg->tv_tpg_mutex -> vq->mutex
1571 struct vhost_scsi_tpg *tpg;
1598 list_for_each_entry(tpg, &vhost_scsi_list, tv_tpg_list) {
1599 mutex_lock(&tpg->tv_tpg_mutex);
1600 if (!tpg->tpg_nexus) {
1601 mutex_unlock(&tpg->tv_tpg_mutex);
1604 if (tpg->tv_tpg_vhost_count != 0) {
1605 mutex_unlock(&tpg->tv_tpg_mutex);
1608 tv_tport = tpg->tport;
1611 if (vs->vs_tpg && vs->vs_tpg[tpg->tport_tpgt]) {
1612 mutex_unlock(&tpg->tv_tpg_mutex);
1622 se_tpg = &tpg->se_tpg;
1626 mutex_unlock(&tpg->tv_tpg_mutex);
1629 tpg->tv_tpg_vhost_count++;
1630 tpg->vhost_scsi = vs;
1631 vs_tpg[tpg->tport_tpgt] = tpg;
1634 mutex_unlock(&tpg->tv_tpg_mutex);
1679 tpg = vs_tpg[i];
1680 if (tpg) {
1681 tpg->tv_tpg_vhost_count--;
1682 target_undepend_item(&tpg->se_tpg.tpg_group.cg_item);
1698 struct vhost_scsi_tpg *tpg;
1721 tpg = vs->vs_tpg[target];
1722 if (!tpg)
1725 mutex_lock(&tpg->tv_tpg_mutex);
1726 tv_tport = tpg->tport;
1733 pr_warn("tv_tport->tport_name: %s, tpg->tport_tpgt: %hu"
1735 tv_tport->tport_name, tpg->tport_tpgt,
1740 tpg->tv_tpg_vhost_count--;
1741 tpg->vhost_scsi = NULL;
1744 mutex_unlock(&tpg->tv_tpg_mutex);
1749 se_tpg = &tpg->se_tpg;
1779 mutex_unlock(&tpg->tv_tpg_mutex);
1984 vhost_scsi_do_plug(struct vhost_scsi_tpg *tpg,
1988 struct vhost_scsi *vs = tpg->vhost_scsi;
2005 vhost_scsi_send_evt(vs, tpg, lun,
2011 static void vhost_scsi_hotplug(struct vhost_scsi_tpg *tpg, struct se_lun *lun)
2013 vhost_scsi_do_plug(tpg, lun, true);
2016 static void vhost_scsi_hotunplug(struct vhost_scsi_tpg *tpg, struct se_lun *lun)
2018 vhost_scsi_do_plug(tpg, lun, false);
2024 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2036 mutex_lock(&tpg->tv_tpg_mutex);
2037 tpg->tv_tpg_port_count++;
2038 list_add_tail(&tmf->queue_entry, &tpg->tmf_queue);
2039 mutex_unlock(&tpg->tv_tpg_mutex);
2041 vhost_scsi_hotplug(tpg, lun);
2051 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2057 mutex_lock(&tpg->tv_tpg_mutex);
2058 tpg->tv_tpg_port_count--;
2059 tmf = list_first_entry(&tpg->tmf_queue, struct vhost_scsi_tmf,
2063 mutex_unlock(&tpg->tv_tpg_mutex);
2065 vhost_scsi_hotunplug(tpg, lun);
2074 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2087 tpg->tv_fabric_prot_type = val;
2096 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2099 return sprintf(page, "%d\n", tpg->tv_fabric_prot_type);
2109 static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
2114 mutex_lock(&tpg->tv_tpg_mutex);
2115 if (tpg->tpg_nexus) {
2116 mutex_unlock(&tpg->tv_tpg_mutex);
2117 pr_debug("tpg->tpg_nexus already exists\n");
2123 mutex_unlock(&tpg->tv_tpg_mutex);
2132 tv_nexus->tvn_se_sess = target_setup_session(&tpg->se_tpg, 0, 0,
2136 mutex_unlock(&tpg->tv_tpg_mutex);
2140 tpg->tpg_nexus = tv_nexus;
2142 mutex_unlock(&tpg->tv_tpg_mutex);
2146 static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg)
2151 mutex_lock(&tpg->tv_tpg_mutex);
2152 tv_nexus = tpg->tpg_nexus;
2154 mutex_unlock(&tpg->tv_tpg_mutex);
2160 mutex_unlock(&tpg->tv_tpg_mutex);
2164 if (tpg->tv_tpg_port_count != 0) {
2165 mutex_unlock(&tpg->tv_tpg_mutex);
2168 tpg->tv_tpg_port_count);
2172 if (tpg->tv_tpg_vhost_count != 0) {
2173 mutex_unlock(&tpg->tv_tpg_mutex);
2176 tpg->tv_tpg_vhost_count);
2181 " %s Initiator Port: %s\n", vhost_scsi_dump_proto_id(tpg->tport),
2188 tpg->tpg_nexus = NULL;
2189 mutex_unlock(&tpg->tv_tpg_mutex);
2198 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2203 mutex_lock(&tpg->tv_tpg_mutex);
2204 tv_nexus = tpg->tpg_nexus;
2206 mutex_unlock(&tpg->tv_tpg_mutex);
2211 mutex_unlock(&tpg->tv_tpg_mutex);
2220 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2222 struct vhost_scsi_tport *tport_wwn = tpg->tport;
2229 ret = vhost_scsi_drop_nexus(tpg);
2287 ret = vhost_scsi_make_nexus(tpg, port_ptr);
2307 struct vhost_scsi_tpg *tpg;
2316 tpg = kzalloc(sizeof(*tpg), GFP_KERNEL);
2317 if (!tpg) {
2321 mutex_init(&tpg->tv_tpg_mutex);
2322 INIT_LIST_HEAD(&tpg->tv_tpg_list);
2323 INIT_LIST_HEAD(&tpg->tmf_queue);
2324 tpg->tport = tport;
2325 tpg->tport_tpgt = tpgt;
2327 ret = core_tpg_register(wwn, &tpg->se_tpg, tport->tport_proto_id);
2329 kfree(tpg);
2333 list_add_tail(&tpg->tv_tpg_list, &vhost_scsi_list);
2336 return &tpg->se_tpg;
2341 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
2345 list_del(&tpg->tv_tpg_list);
2350 vhost_scsi_drop_nexus(tpg);
2355 kfree(tpg);