From patchwork Sun May 10 21:57:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539437 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E288D14C0 for ; Sun, 10 May 2020 21:57:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CB3C120801 for ; Sun, 10 May 2020 21:57:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="g4jBJ7vK" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729355AbgEJV5x (ORCPT ); Sun, 10 May 2020 17:57:53 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:42802 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728972AbgEJV5x (ORCPT ); Sun, 10 May 2020 17:57:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147871; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QtOC7yhozGwSpi1ObIbsOC3pYvzbInVS5uL0N04TdXg=; b=g4jBJ7vKy0nynoNpy7NnvTn+aqTK4QJn9ZXlVPQ+3ilpGTVRt0mwSEbwMBNP8Gzsjc4o6V IE69mK1C9qgDj9WWf+WscTPMrN9Z2/5HFw9apE7+HS1FLn62mDckD5iVRi9Y4lyMVj0Ris 8DsjCSK3+xsN+I4WO9834uT9iIlstlU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-146-QIdEDkicMcaMuZqnFklMQQ-1; Sun, 10 May 2020 17:57:49 -0400 X-MC-Unique: QIdEDkicMcaMuZqnFklMQQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id AAE451899521; Sun, 10 May 2020 21:57:48 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id A322F1002382; Sun, 10 May 2020 21:57:47 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 01/15] target: check enforce_pr_isids during registration Date: Sun, 10 May 2020 16:57:30 -0500 Message-Id: <20200510215744.21999-2-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org Move the check for enforce_pr_isids to the registration code where we can fail at the time an initiator tries to register a path without an isid. In its current place in __core_scsi3_locate_pr_reg, it is too late because it can be registered and be reported in PR in commands and it is stuck in this state because we cannot unregister it. Note. I am including in this patchset, because the 5th patch is built on top. Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke Reviewed-by: Lee Duncan --- drivers/target/target_core_pr.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c index 5e93169..cd2d32f 100644 --- a/drivers/target/target_core_pr.c +++ b/drivers/target/target_core_pr.c @@ -1176,15 +1176,6 @@ static struct t10_pr_registration *__core_scsi3_locate_pr_reg( * ISID, then we have found a match. */ if (!pr_reg->isid_present_at_reg) { - /* - * Determine if this SCSI device server requires that - * SCSI Intiatior TransportID w/ ISIDs is enforced - * for fabric modules (iSCSI) requiring them. - */ - if (tpg->se_tpg_tfo->sess_get_initiator_sid != NULL) { - if (dev->dev_attrib.enforce_pr_isids) - continue; - } atomic_inc_mb(&pr_reg->pr_res_holders); spin_unlock(&pr_tmpl->registration_lock); return pr_reg; @@ -1591,10 +1582,25 @@ static void core_scsi3_lunacl_undepend_item(struct se_dev_entry *se_deve) continue; dest_rtpi = tmp_lun->lun_rtpi; + iport_ptr = NULL; i_str = target_parse_pr_out_transport_id(tmp_tpg, ptr, &tid_len, &iport_ptr); if (!i_str) continue; + /* + * Determine if this SCSI device server requires that + * SCSI Intiatior TransportID w/ ISIDs is enforced + * for fabric modules (iSCSI) requiring them. + */ + if (tpg->se_tpg_tfo->sess_get_initiator_sid && + dev->dev_attrib.enforce_pr_isids && + !iport_ptr) { + pr_warn("SPC-PR: enforce_pr_isids is set but a isid has not been sent in the SPEC_I_PT data for %s.", + i_str); + ret = TCM_INVALID_PARAMETER_LIST; + spin_unlock(&dev->se_port_lock); + goto out_unmap; + } atomic_inc_mb(&tmp_tpg->tpg_pr_ref_count); spin_unlock(&dev->se_port_lock); From patchwork Sun May 10 21:57:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539453 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C815417EA for ; Sun, 10 May 2020 21:58:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B0AB620801 for ; Sun, 10 May 2020 21:58:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gGnMB1gl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729457AbgEJV6E (ORCPT ); Sun, 10 May 2020 17:58:04 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:35121 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729421AbgEJV6E (ORCPT ); Sun, 10 May 2020 17:58:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147881; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=c883L+0FxgYJSLRcMvFrWp4tibYxxIu1dWuQptPC9y4=; b=gGnMB1glbBKEPAcU7TjyRJjz8RzFJArHG5eFRQS4JWXXqnYlFWTIuy1ieHWeXdvtyW3zK1 JvJ+48osA5f07EUroi3zSb53JpA9aNNLa77lptsfp0s0OfuaOv4XfA5Y7A6OzT8Zdyz/h/ XePPhlVEh92y4+KuIwtmI0zNM6smeHA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-45-50L3z5XJP-iDvgXukGah9g-1; Sun, 10 May 2020 17:57:56 -0400 X-MC-Unique: 50L3z5XJP-iDvgXukGah9g-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9947D835B8B; Sun, 10 May 2020 21:57:55 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id D7D1D10016E8; Sun, 10 May 2020 21:57:48 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie , "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi , Juergen Gross Subject: [PATCH 02/15] target: separate acl name from port ids Date: Sun, 10 May 2020 16:57:31 -0500 Message-Id: <20200510215744.21999-3-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org The PGR code assumes the ACL name is going to be based on the SPC4 transportID type of values. The problem is that for iSCSI we have an extra session id as part of the SCSI port id and some fabric modules support or would like to support non transportID values for the ACL name. For example, iSCSI and SRP would like to use the source address for the ACL name, but that is not a valud transportID value that you can get in a PGR request. This patch adds a new transport_id struct which maps to the SPC4 transportID. In the future it will be used for PGR commands instead of the ACL name. In this patchset it is used to export the initiator info in the session's sysfs dir, so tools can display the info and daemons that execute commands like PGRs in userspace can build a session id to I_T nexus mapping. In this patch only srp is passing in different values for the transport id and acl name. The next patches will convert loop, scsi vhost and xen scsiback that are more complex due to their initiator name emulation. Cc: Michael S. Tsirkin Cc: Jason Wang Cc: Paolo Bonzini Cc: Stefan Hajnoczi Cc: Juergen Gross Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke Reviewed-by: Lee Duncan --- V4: - Don't drop const char use. We still have target_setup_session allocate the transport_id struct, but because every uses format=0 we just need to pass in the transport_id's name. V3: - drop format drivers/infiniband/ulp/srpt/ib_srpt.c | 10 +++++--- drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | 4 +-- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 2 +- drivers/target/loopback/tcm_loop.c | 3 ++- drivers/target/sbp/sbp_target.c | 2 +- drivers/target/target_core_fabric_lib.c | 41 +++++++++++++++++++++++++++++++ drivers/target/target_core_transport.c | 42 ++++++++++++++++++++++++-------- drivers/target/tcm_fc/tfc_sess.c | 3 ++- drivers/usb/gadget/function/f_tcm.c | 3 ++- drivers/vhost/scsi.c | 1 + drivers/xen/xen-scsiback.c | 3 ++- include/target/target_core_base.h | 12 +++++++++ include/target/target_core_fabric.h | 5 +++- 13 files changed, 108 insertions(+), 23 deletions(-) diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index 9855274..d107f63 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -2320,7 +2320,8 @@ static int srpt_cm_req_recv(struct srpt_device *const sdev, break; ch->sess = target_setup_session(&stpg->tpg, tag_num, tag_size, TARGET_PROT_NORMAL, - ch->sess_name, ch, NULL); + i_port_id + 2, ch->sess_name, + ch, NULL); } mutex_unlock(&sport->port_guid_id.mutex); @@ -2329,14 +2330,15 @@ static int srpt_cm_req_recv(struct srpt_device *const sdev, if (!IS_ERR_OR_NULL(ch->sess)) break; ch->sess = target_setup_session(&stpg->tpg, tag_num, - tag_size, TARGET_PROT_NORMAL, i_port_id, - ch, NULL); + tag_size, TARGET_PROT_NORMAL, + i_port_id + 2, i_port_id, ch, NULL); if (!IS_ERR_OR_NULL(ch->sess)) break; /* Retry without leading "0x" */ ch->sess = target_setup_session(&stpg->tpg, tag_num, tag_size, TARGET_PROT_NORMAL, - i_port_id + 2, ch, NULL); + i_port_id + 2, i_port_id + 2, + ch, NULL); } mutex_unlock(&sport->port_gid_id.mutex); diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c index d9e94e8..31459f3 100644 --- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c +++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c @@ -2223,8 +2223,8 @@ static int ibmvscsis_make_nexus(struct ibmvscsis_tport *tport) } nexus->se_sess = target_setup_session(&tport->se_tpg, 0, 0, - TARGET_PROT_NORMAL, name, nexus, - NULL); + TARGET_PROT_NORMAL, name, name, + nexus, NULL); if (IS_ERR(nexus->se_sess)) { rc = PTR_ERR(nexus->se_sess); goto transport_init_fail; diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 1f0a185..7b21809 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -1483,7 +1483,7 @@ static int tcm_qla2xxx_check_initiator_node_acl( */ se_sess = target_setup_session(&tpg->se_tpg, num_tags, sizeof(struct qla_tgt_cmd), - TARGET_PROT_ALL, port_name, + TARGET_PROT_ALL, port_name, port_name, qlat_sess, tcm_qla2xxx_session_cb); if (IS_ERR(se_sess)) return PTR_ERR(se_sess); diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index 3305b47..74aded7 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c @@ -742,7 +742,8 @@ static int tcm_loop_make_nexus( tl_nexus->se_sess = target_setup_session(&tl_tpg->tl_se_tpg, 0, 0, TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS, - name, tl_nexus, tcm_loop_alloc_sess_cb); + name, name, tl_nexus, + tcm_loop_alloc_sess_cb); if (IS_ERR(tl_nexus->se_sess)) { ret = PTR_ERR(tl_nexus->se_sess); kfree(tl_nexus); diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c index e4a9b9f..2cac4d9 100644 --- a/drivers/target/sbp/sbp_target.c +++ b/drivers/target/sbp/sbp_target.c @@ -199,7 +199,7 @@ static struct sbp_session *sbp_session_create( sess->se_sess = target_setup_session(&tpg->se_tpg, 128, sizeof(struct sbp_target_request), TARGET_PROT_NORMAL, guid_str, - sess, NULL); + guid_str, sess, NULL); if (IS_ERR(sess->se_sess)) { pr_err("failed to init se_session\n"); ret = PTR_ERR(sess->se_sess); diff --git a/drivers/target/target_core_fabric_lib.c b/drivers/target/target_core_fabric_lib.c index 1e031d8..e89b3d8 100644 --- a/drivers/target/target_core_fabric_lib.c +++ b/drivers/target/target_core_fabric_lib.c @@ -422,3 +422,44 @@ const char *target_parse_pr_out_transport_id(struct se_portal_group *tpg, *out_tid_len = 24; return buf + offset; } + +struct t10_transport_id *target_create_transport_id(u8 proto, const char *name, + const char *session_id) +{ + struct t10_transport_id *tpt_id; + + tpt_id = kzalloc(sizeof(*tpt_id), GFP_KERNEL); + if (!tpt_id) + return NULL; + tpt_id->proto = proto; + + tpt_id->name = kstrdup(name, GFP_KERNEL); + if (!tpt_id->name) + goto free_tpt_id; + + if (session_id) { + tpt_id->session_id = kstrdup(session_id, GFP_KERNEL); + if (!tpt_id->session_id) + goto free_name; + } + + return tpt_id; + +free_name: + kfree(tpt_id->name); +free_tpt_id: + kfree(tpt_id); + return NULL; +} +EXPORT_SYMBOL(target_create_transport_id); + +void target_free_transport_id(struct t10_transport_id *tpt_id) +{ + if (!tpt_id) + return; + + kfree(tpt_id->name); + kfree(tpt_id->session_id); + kfree(tpt_id); +} +EXPORT_SYMBOL(target_free_transport_id); diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 594b724..fb00fcc 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -413,15 +413,27 @@ void transport_register_session( } EXPORT_SYMBOL(transport_register_session); +/** + * target_setup_session - alloc and add a session to lio core + * @tpg: parent tpg + * @tag_num: if non-zero max num in-flight commands. + * @tag_size: if tag_num is non-zero, fabric driver's per cmd data in bytes. + * @prot_op: bitmask that defines which T10-PI modes are supported. + * @tpt_id_name: SCSI TransportID name/address/identifier + * @acl_name: name used for se_node_acl + * @private: storage for fabric driver accessible via fabric_sess_ptr + * @callback: opt function called before session has been added to lio core. + */ struct se_session * target_setup_session(struct se_portal_group *tpg, unsigned int tag_num, unsigned int tag_size, - enum target_prot_op prot_op, - const char *initiatorname, void *private, + enum target_prot_op prot_op, const char *tpt_id_name, + const char *acl_name, void *private, int (*callback)(struct se_portal_group *, struct se_session *, void *)) { struct se_session *sess; + int rc; /* * If the fabric driver is using percpu-ida based pre allocation @@ -435,26 +447,35 @@ struct se_session * if (IS_ERR(sess)) return sess; + sess->tpt_id = target_create_transport_id(tpg->proto_id, tpt_id_name, + NULL); + if (!sess->tpt_id) { + rc = -ENOMEM; + goto free_sess; + } + sess->se_node_acl = core_tpg_check_initiator_node_acl(tpg, - (unsigned char *)initiatorname); + (unsigned char *)acl_name); if (!sess->se_node_acl) { - transport_free_session(sess); - return ERR_PTR(-EACCES); + rc = -EACCES; + goto free_sess; } /* * Go ahead and perform any remaining fabric setup that is * required before transport_register_session(). */ if (callback != NULL) { - int rc = callback(tpg, sess, private); - if (rc) { - transport_free_session(sess); - return ERR_PTR(rc); - } + rc = callback(tpg, sess, private); + if (rc) + goto free_sess; } transport_register_session(tpg, sess->se_node_acl, sess, private); return sess; + +free_sess: + transport_free_session(sess); + return ERR_PTR(rc); } EXPORT_SYMBOL(target_setup_session); @@ -579,6 +600,7 @@ void transport_free_session(struct se_session *se_sess) sbitmap_queue_free(&se_sess->sess_tag_pool); kvfree(se_sess->sess_cmd_map); } + target_free_transport_id(se_sess->tpt_id); percpu_ref_exit(&se_sess->cmd_count); kmem_cache_free(se_sess_cache, se_sess); } diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c index 4fd6a1d..1d1c460 100644 --- a/drivers/target/tcm_fc/tfc_sess.c +++ b/drivers/target/tcm_fc/tfc_sess.c @@ -230,7 +230,8 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id, sess->se_sess = target_setup_session(se_tpg, TCM_FC_DEFAULT_TAGS, sizeof(struct ft_cmd), TARGET_PROT_NORMAL, &initiatorname[0], - sess, ft_sess_alloc_cb); + &initiatorname[0], sess, + ft_sess_alloc_cb); if (IS_ERR(sess->se_sess)) { int rc = PTR_ERR(sess->se_sess); kfree(sess); diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c index 3650493..cab3036 100644 --- a/drivers/usb/gadget/function/f_tcm.c +++ b/drivers/usb/gadget/function/f_tcm.c @@ -1583,7 +1583,8 @@ static int tcm_usbg_make_nexus(struct usbg_tpg *tpg, char *name) USB_G_DEFAULT_SESSION_TAGS, sizeof(struct usbg_cmd), TARGET_PROT_NORMAL, name, - tv_nexus, usbg_alloc_sess_cb); + name, tv_nexus, + usbg_alloc_sess_cb); if (IS_ERR(tv_nexus->tvn_se_sess)) { #define MAKE_NEXUS_MSG "core_tpg_check_initiator_node_acl() failed for %s\n" pr_debug(MAKE_NEXUS_MSG, name); diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index c399522..15aabc2 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c @@ -1964,6 +1964,7 @@ static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg, VHOST_SCSI_DEFAULT_TAGS, sizeof(struct vhost_scsi_cmd), TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS, + (unsigned char *)name, (unsigned char *)name, tv_nexus, vhost_scsi_nexus_cb); if (IS_ERR(tv_nexus->tvn_se_sess)) { diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 75c0a2e..93cb386 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c @@ -1531,7 +1531,8 @@ static int scsiback_make_nexus(struct scsiback_tpg *tpg, VSCSI_DEFAULT_SESSION_TAGS, sizeof(struct vscsibk_pend), TARGET_PROT_NORMAL, name, - tv_nexus, scsiback_alloc_sess_cb); + name, tv_nexus, + scsiback_alloc_sess_cb); if (IS_ERR(tv_nexus->tvn_se_sess)) { kfree(tv_nexus); ret = -ENOMEM; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 6d4a694..2e79cce 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -331,6 +331,17 @@ struct t10_wwn { struct list_head t10_vpd_list; }; +struct t10_transport_id { + /* The format=0 transport specific port id/name value. */ + char *name; + /* + * If proto is iSCSI and it's using format=1, then this is set to the + * initiator session id string defined in spc4r37 table 508. + */ + char *session_id; + u8 proto; +}; + struct t10_pr_registration { /* Used for fabrics that contain WWN+ISID */ #define PR_REG_ISID_LEN 16 @@ -610,6 +621,7 @@ static inline struct se_node_acl *fabric_stat_to_nacl(struct config_item *item) struct se_session { unsigned sess_tearing_down:1; u64 sess_bin_isid; + struct t10_transport_id *tpt_id; enum target_prot_op sup_prot_ops; enum target_prot_type sess_prot_type; struct se_node_acl *se_node_acl; diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index 063f133..af1dd81 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -125,9 +125,12 @@ struct target_core_fabric_ops { int target_depend_item(struct config_item *item); void target_undepend_item(struct config_item *item); +struct t10_transport_id *target_create_transport_id(u8, const char *, + const char *); +void target_free_transport_id(struct t10_transport_id *); struct se_session *target_setup_session(struct se_portal_group *, unsigned int, unsigned int, enum target_prot_op prot_op, - const char *, void *, + const char *, const char *, void *, int (*callback)(struct se_portal_group *, struct se_session *, void *)); void target_remove_session(struct se_session *); From patchwork Sun May 10 21:57:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539447 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3194217EA for ; Sun, 10 May 2020 21:58:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1907C20801 for ; Sun, 10 May 2020 21:58:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hLm1AjDo" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729453AbgEJV6D (ORCPT ); Sun, 10 May 2020 17:58:03 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:31073 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729423AbgEJV6C (ORCPT ); Sun, 10 May 2020 17:58:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147881; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rvoZGSRWBEXYEtlMWTnXJDJmfm1hmNo6v+xGFxXvqPo=; b=hLm1AjDopXh1U233cB+ozN6/+g/0Ue9ZBlpqf98eoZIMZS9Bt92IvFQM+73mXuOqqaTVb4 NRqeKY4Bnsygdgo/aSh0AfV5xOctdAxHFfW0NWfm2sbEmd/dXj3Aw5OAQxfN5OVu0JPF1t gKCRa3EgobgjcDjevo0jUjmtpltae6s= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-489-XIOpnXElP2GNph8mO1ilvw-1; Sun, 10 May 2020 17:57:59 -0400 X-MC-Unique: XIOpnXElP2GNph8mO1ilvw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 352761005510; Sun, 10 May 2020 21:57:58 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id C57111002382; Sun, 10 May 2020 21:57:55 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie , "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi , Juergen Gross Subject: [PATCH 03/15] target: add helper to parse acl and transport name Date: Sun, 10 May 2020 16:57:32 -0500 Message-Id: <20200510215744.21999-4-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org The drivers that emulate the initiator port id (loop, scsi vhost, xen scsiback) do almost the extact same parsing when making their I_T_nexus. This adds a helper that parses out the acl name and port name from the user buffer, so these types of drivers drop prefixes like "naa." when they need to for the SCSI SPC4 TransportID SAS address, but then keep it for the LIO ACL name. The next patches will then convert those drivers. Cc: Michael S. Tsirkin Cc: Jason Wang Cc: Paolo Bonzini Cc: Stefan Hajnoczi Cc: Juergen Gross Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke Reviewed-by: Lee Duncan --- drivers/target/target_core_fabric_lib.c | 73 +++++++++++++++++++++++++++++++++ include/target/target_core_fabric.h | 2 + 2 files changed, 75 insertions(+) diff --git a/drivers/target/target_core_fabric_lib.c b/drivers/target/target_core_fabric_lib.c index e89b3d8..81ed7d5 100644 --- a/drivers/target/target_core_fabric_lib.c +++ b/drivers/target/target_core_fabric_lib.c @@ -423,6 +423,79 @@ const char *target_parse_pr_out_transport_id(struct se_portal_group *tpg, return buf + offset; } +/** + * target_parse_emulated_name - parse TransportID and acl name from user buffer + * @proto_id: SCSI protocol identifier + * @user_buf: buffer with emualted name to extract acl and TransportID from + * @acl_name: buffer to store se_node_acl name in + * @max_name_len: len of acl_name buffer + * @tpt_id_name: Pointer to the TransportID name will be stored here. + */ +int target_parse_emulated_name(u8 proto_id, const char *user_buf, + unsigned char *acl_name, int max_name_len, + unsigned char **tpt_id_name) +{ + int user_len = strlen(user_buf); + char *proto_prefix, *name_start; + + if (user_len >= max_name_len) { + pr_err("Emulated name: %s, exceeds max: %d\n", user_buf, + max_name_len); + return -EINVAL; + } + + switch (proto_id) { + case SCSI_PROTOCOL_SAS: + proto_prefix = "naa."; + break; + case SCSI_PROTOCOL_FCP: + proto_prefix = "fc."; + break; + case SCSI_PROTOCOL_ISCSI: + proto_prefix = "iqn."; + break; + default: + pr_err("Unsupported proto_id: 0x%02x\n", proto_id); + return -EINVAL; + } + + name_start = strstr(user_buf, proto_prefix); + if (!name_start) { + pr_err("Invalid emulated name %s. Must start with %s\n", + user_buf, proto_prefix); + return -EINVAL; + } + + switch (proto_id) { + case SCSI_PROTOCOL_SAS: + sprintf(acl_name, name_start); + break; + case SCSI_PROTOCOL_FCP: + sprintf(acl_name, &name_start[3]); /* Skip over "fc." */ + break; + case SCSI_PROTOCOL_ISCSI: + sprintf(acl_name, name_start); + break; + } + + if (acl_name[user_len - 1] == '\n') + acl_name[user_len - 1] = '\0'; + + if (proto_id == SCSI_PROTOCOL_SAS) { + /* + * target_setup_session will want the naa. prefix to match + * the ACL name, but the t10 transport id only wants the + * address. + */ + *tpt_id_name = acl_name + 4; + } else { + *tpt_id_name = acl_name; + } + + return 0; +} +EXPORT_SYMBOL(target_parse_emulated_name); + struct t10_transport_id *target_create_transport_id(u8 proto, const char *name, const char *session_id) { diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index af1dd81..0113e1c 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -125,6 +125,8 @@ struct target_core_fabric_ops { int target_depend_item(struct config_item *item); void target_undepend_item(struct config_item *item); +int target_parse_emulated_name(u8, const char *, unsigned char *, int, + unsigned char **); struct t10_transport_id *target_create_transport_id(u8, const char *, const char *); void target_free_transport_id(struct t10_transport_id *); From patchwork Sun May 10 21:57:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539451 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 91D5F14B4 for ; Sun, 10 May 2020 21:58:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 79A9420801 for ; Sun, 10 May 2020 21:58:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="EDbpQlQ8" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729423AbgEJV6D (ORCPT ); Sun, 10 May 2020 17:58:03 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:53280 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727771AbgEJV6D (ORCPT ); Sun, 10 May 2020 17:58:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147881; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MsyvH9GitKHUxBhaxtCpGLpGmekg1oe8CYsiLYGkx9Q=; b=EDbpQlQ8Qrqy/nWKE5DM3lc7eg5wlYCvOZCFMnxzZs1tMaSi55sQvAFNxHfTvBKtZ9j/OA MfdJtGj5GkEueycKSFRDcc6ndIr5QWoFsXZgmfYXMwdA89Ggj0lYM7ML4/jCKsIbZogKQd 4VuPo/HnG5VAYW1MlFsxKAyVl4cULqk= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-214-x_WjqQOcOJeKH2ozsvan9Q-1; Sun, 10 May 2020 17:57:59 -0400 X-MC-Unique: x_WjqQOcOJeKH2ozsvan9Q-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 39BE8100A68C; Sun, 10 May 2020 21:57:58 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 606E31002387; Sun, 10 May 2020 21:57:57 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 04/15] tcm loop: use target_parse_emulated_name Date: Sun, 10 May 2020 16:57:33 -0500 Message-Id: <20200510215744.21999-5-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org Use target_parse_emulated_name so the acl and SCSI names are properly formatted. Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke Reviewed-by: Lee Duncan --- drivers/target/loopback/tcm_loop.c | 65 ++++++-------------------------------- 1 file changed, 10 insertions(+), 55 deletions(-) diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index 74aded7..64e5f1f 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c @@ -725,7 +725,8 @@ static int tcm_loop_alloc_sess_cb(struct se_portal_group *se_tpg, static int tcm_loop_make_nexus( struct tcm_loop_tpg *tl_tpg, - const char *name) + const char *tpt_id_name, + const char *acl_name) { struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; struct tcm_loop_nexus *tl_nexus; @@ -742,7 +743,7 @@ static int tcm_loop_make_nexus( tl_nexus->se_sess = target_setup_session(&tl_tpg->tl_se_tpg, 0, 0, TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS, - name, name, tl_nexus, + tpt_id_name, acl_name, tl_nexus, tcm_loop_alloc_sess_cb); if (IS_ERR(tl_nexus->se_sess)) { ret = PTR_ERR(tl_nexus->se_sess); @@ -751,7 +752,7 @@ static int tcm_loop_make_nexus( } pr_debug("TCM_Loop_ConfigFS: Established I_T Nexus to emulated %s Initiator Port: %s\n", - tcm_loop_dump_proto_id(tl_hba), name); + tcm_loop_dump_proto_id(tl_hba), acl_name); return 0; } @@ -814,7 +815,7 @@ static ssize_t tcm_loop_tpg_nexus_store(struct config_item *item, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, tl_se_tpg); struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; - unsigned char i_port[TL_WWN_ADDR_LEN], *ptr, *port_ptr; + unsigned char i_port[TL_WWN_ADDR_LEN], *tpt_id_name; int ret; /* * Shutdown the active I_T nexus if 'NULL' is passed.. @@ -823,59 +824,13 @@ static ssize_t tcm_loop_tpg_nexus_store(struct config_item *item, ret = tcm_loop_drop_nexus(tl_tpg); return (!ret) ? count : ret; } - /* - * Otherwise make sure the passed virtual Initiator port WWN matches - * the fabric protocol_id set in tcm_loop_make_scsi_hba(), and call - * tcm_loop_make_nexus() - */ - if (strlen(page) >= TL_WWN_ADDR_LEN) { - pr_err("Emulated NAA Sas Address: %s, exceeds max: %d\n", - page, TL_WWN_ADDR_LEN); - return -EINVAL; - } - snprintf(&i_port[0], TL_WWN_ADDR_LEN, "%s", page); - ptr = strstr(i_port, "naa."); - if (ptr) { - if (tl_hba->tl_proto_id != SCSI_PROTOCOL_SAS) { - pr_err("Passed SAS Initiator Port %s does not match target port protoid: %s\n", - i_port, tcm_loop_dump_proto_id(tl_hba)); - return -EINVAL; - } - port_ptr = &i_port[0]; - goto check_newline; - } - ptr = strstr(i_port, "fc."); - if (ptr) { - if (tl_hba->tl_proto_id != SCSI_PROTOCOL_FCP) { - pr_err("Passed FCP Initiator Port %s does not match target port protoid: %s\n", - i_port, tcm_loop_dump_proto_id(tl_hba)); - return -EINVAL; - } - port_ptr = &i_port[3]; /* Skip over "fc." */ - goto check_newline; - } - ptr = strstr(i_port, "iqn."); - if (ptr) { - if (tl_hba->tl_proto_id != SCSI_PROTOCOL_ISCSI) { - pr_err("Passed iSCSI Initiator Port %s does not match target port protoid: %s\n", - i_port, tcm_loop_dump_proto_id(tl_hba)); - return -EINVAL; - } - port_ptr = &i_port[0]; - goto check_newline; - } - pr_err("Unable to locate prefix for emulated Initiator Port: %s\n", - i_port); - return -EINVAL; - /* - * Clear any trailing newline for the NAA WWN - */ -check_newline: - if (i_port[strlen(i_port)-1] == '\n') - i_port[strlen(i_port)-1] = '\0'; + ret = target_parse_emulated_name(tl_hba->tl_proto_id, page, i_port, + TL_WWN_ADDR_LEN, &tpt_id_name); + if (ret) + return ret; - ret = tcm_loop_make_nexus(tl_tpg, port_ptr); + ret = tcm_loop_make_nexus(tl_tpg, tpt_id_name, i_port); if (ret < 0) return ret; From patchwork Sun May 10 21:57:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539455 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 05B72186E for ; Sun, 10 May 2020 21:58:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E250420801 for ; Sun, 10 May 2020 21:58:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="EvYJFxdn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729421AbgEJV6F (ORCPT ); Sun, 10 May 2020 17:58:05 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:29677 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729442AbgEJV6D (ORCPT ); Sun, 10 May 2020 17:58:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147882; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Tb0yaxm4W/GEl5NIEmI5XQPIA5a9DC54oKi6HXeQKuI=; b=EvYJFxdnr1x9aKpzkSGZwxM2GjJ7YY6bFNF2XSoc7DrBpxHSS9IZsQQ33/Gja+vp60QBWP kbvoqBNYd0Gy9WfV6ZEUZTqvlQuiIgg1s1KvunEdHKO/hadE2DAhyfnoAGMU3LSoVQG99y dl5ZdWejuFF5AFjmBN9wDR8tsqRUdzY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-189--NXh9Xw5Oh6FCJOrpId5SQ-1; Sun, 10 May 2020 17:58:00 -0400 X-MC-Unique: -NXh9Xw5Oh6FCJOrpId5SQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B77F380058A; Sun, 10 May 2020 21:57:59 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 692021002382; Sun, 10 May 2020 21:57:58 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie , "Michael S . Tsirkin" , Jason Wang , Paolo Bonzini , Stefan Hajnoczi Subject: [PATCH 05/15] vhost scsi: use target_parse_emulated_name Date: Sun, 10 May 2020 16:57:34 -0500 Message-Id: <20200510215744.21999-6-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org Use target_parse_emulated_name so the acl and SCSI names are properly formatted. Cc: Michael S. Tsirkin Cc: Jason Wang Cc: Paolo Bonzini Cc: Stefan Hajnoczi Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke --- drivers/vhost/scsi.c | 69 +++++++++------------------------------------------- 1 file changed, 11 insertions(+), 58 deletions(-) diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index 15aabc2..37f66f8 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c @@ -1938,7 +1938,8 @@ static int vhost_scsi_nexus_cb(struct se_portal_group *se_tpg, } static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg, - const char *name) + const char *tpt_id_name, + const char *acl_name) { struct vhost_scsi_nexus *tv_nexus; @@ -1964,8 +1965,8 @@ static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg, VHOST_SCSI_DEFAULT_TAGS, sizeof(struct vhost_scsi_cmd), TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS, - (unsigned char *)name, - (unsigned char *)name, tv_nexus, + (unsigned char *)tpt_id_name, + (unsigned char *)acl_name, tv_nexus, vhost_scsi_nexus_cb); if (IS_ERR(tv_nexus->tvn_se_sess)) { mutex_unlock(&tpg->tv_tpg_mutex); @@ -2056,7 +2057,7 @@ static ssize_t vhost_scsi_tpg_nexus_store(struct config_item *item, struct vhost_scsi_tpg *tpg = container_of(se_tpg, struct vhost_scsi_tpg, se_tpg); struct vhost_scsi_tport *tport_wwn = tpg->tport; - unsigned char i_port[VHOST_SCSI_NAMELEN], *ptr, *port_ptr; + unsigned char i_port[VHOST_SCSI_NAMELEN], *tpt_id_name; int ret; /* * Shutdown the active I_T nexus if 'NULL' is passed.. @@ -2065,62 +2066,14 @@ static ssize_t vhost_scsi_tpg_nexus_store(struct config_item *item, ret = vhost_scsi_drop_nexus(tpg); return (!ret) ? count : ret; } - /* - * Otherwise make sure the passed virtual Initiator port WWN matches - * the fabric protocol_id set in vhost_scsi_make_tport(), and call - * vhost_scsi_make_nexus(). - */ - if (strlen(page) >= VHOST_SCSI_NAMELEN) { - pr_err("Emulated NAA Sas Address: %s, exceeds" - " max: %d\n", page, VHOST_SCSI_NAMELEN); - return -EINVAL; - } - snprintf(&i_port[0], VHOST_SCSI_NAMELEN, "%s", page); - ptr = strstr(i_port, "naa."); - if (ptr) { - if (tport_wwn->tport_proto_id != SCSI_PROTOCOL_SAS) { - pr_err("Passed SAS Initiator Port %s does not" - " match target port protoid: %s\n", i_port, - vhost_scsi_dump_proto_id(tport_wwn)); - return -EINVAL; - } - port_ptr = &i_port[0]; - goto check_newline; - } - ptr = strstr(i_port, "fc."); - if (ptr) { - if (tport_wwn->tport_proto_id != SCSI_PROTOCOL_FCP) { - pr_err("Passed FCP Initiator Port %s does not" - " match target port protoid: %s\n", i_port, - vhost_scsi_dump_proto_id(tport_wwn)); - return -EINVAL; - } - port_ptr = &i_port[3]; /* Skip over "fc." */ - goto check_newline; - } - ptr = strstr(i_port, "iqn."); - if (ptr) { - if (tport_wwn->tport_proto_id != SCSI_PROTOCOL_ISCSI) { - pr_err("Passed iSCSI Initiator Port %s does not" - " match target port protoid: %s\n", i_port, - vhost_scsi_dump_proto_id(tport_wwn)); - return -EINVAL; - } - port_ptr = &i_port[0]; - goto check_newline; - } - pr_err("Unable to locate prefix for emulated Initiator Port:" - " %s\n", i_port); - return -EINVAL; - /* - * Clear any trailing newline for the NAA WWN - */ -check_newline: - if (i_port[strlen(i_port)-1] == '\n') - i_port[strlen(i_port)-1] = '\0'; + ret = target_parse_emulated_name(tport_wwn->tport_proto_id, page, + i_port, VHOST_SCSI_NAMELEN, + &tpt_id_name); + if (ret) + return ret; - ret = vhost_scsi_make_nexus(tpg, port_ptr); + ret = vhost_scsi_make_nexus(tpg, tpt_id_name, i_port); if (ret < 0) return ret; From patchwork Sun May 10 21:57:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539457 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6868314B4 for ; Sun, 10 May 2020 21:58:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 510D720801 for ; Sun, 10 May 2020 21:58:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZYgY4Cfq" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729466AbgEJV6G (ORCPT ); Sun, 10 May 2020 17:58:06 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:42651 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729441AbgEJV6F (ORCPT ); Sun, 10 May 2020 17:58:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147884; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jUi/69iaDVbNPqCoWyiNX9mn40b+dGSpMRQdJMaf+O0=; b=ZYgY4CfqJLTZ6uUhFsTjHbF387gWODL56QHSUVDNizsFk1Twtohqlir4gCNS5OzH1Jw62U 2dwW2sW21JMeuMm615nM7NYc3Bb28nntkSX9Cj0AfCFrNDefN/UfBA29epw/8JPmlcVzec EsS1yuSh748uuZdd/a2q2kIHNjXvsF8= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-186-M3GIETe_Pcmd60WKHVItrg-1; Sun, 10 May 2020 17:58:02 -0400 X-MC-Unique: M3GIETe_Pcmd60WKHVItrg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DB6C41899520; Sun, 10 May 2020 21:58:00 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id E4D251002382; Sun, 10 May 2020 21:57:59 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie , Juergen Gross Subject: [PATCH 06/15] xen scsiback: use target_parse_emulated_name Date: Sun, 10 May 2020 16:57:35 -0500 Message-Id: <20200510215744.21999-7-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org Use target_parse_emulated_name so the acl and SCSI names are properly formatted. Cc: Juergen Gross Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke Acked-by: Juergen Gross --- drivers/xen/xen-scsiback.c | 66 ++++++++-------------------------------------- 1 file changed, 11 insertions(+), 55 deletions(-) diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 93cb386..f70b6da 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c @@ -1509,7 +1509,8 @@ static int scsiback_alloc_sess_cb(struct se_portal_group *se_tpg, } static int scsiback_make_nexus(struct scsiback_tpg *tpg, - const char *name) + const char *tpt_id_name, + const char *acl_name) { struct scsiback_nexus *tv_nexus; int ret = 0; @@ -1530,8 +1531,9 @@ static int scsiback_make_nexus(struct scsiback_tpg *tpg, tv_nexus->tvn_se_sess = target_setup_session(&tpg->se_tpg, VSCSI_DEFAULT_SESSION_TAGS, sizeof(struct vscsibk_pend), - TARGET_PROT_NORMAL, name, - name, tv_nexus, + TARGET_PROT_NORMAL, + tpt_id_name, acl_name, + tv_nexus, scsiback_alloc_sess_cb); if (IS_ERR(tv_nexus->tvn_se_sess)) { kfree(tv_nexus); @@ -1619,7 +1621,7 @@ static ssize_t scsiback_tpg_nexus_store(struct config_item *item, struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg, se_tpg); struct scsiback_tport *tport_wwn = tpg->tport; - unsigned char i_port[VSCSI_NAMELEN], *ptr, *port_ptr; + unsigned char i_port[VSCSI_NAMELEN], *tpt_id_name; int ret; /* * Shutdown the active I_T nexus if 'NULL' is passed. @@ -1628,59 +1630,13 @@ static ssize_t scsiback_tpg_nexus_store(struct config_item *item, ret = scsiback_drop_nexus(tpg); return (!ret) ? count : ret; } - /* - * Otherwise make sure the passed virtual Initiator port WWN matches - * the fabric protocol_id set in scsiback_make_tport(), and call - * scsiback_make_nexus(). - */ - if (strlen(page) >= VSCSI_NAMELEN) { - pr_err("Emulated NAA Sas Address: %s, exceeds max: %d\n", - page, VSCSI_NAMELEN); - return -EINVAL; - } - snprintf(&i_port[0], VSCSI_NAMELEN, "%s", page); - ptr = strstr(i_port, "naa."); - if (ptr) { - if (tport_wwn->tport_proto_id != SCSI_PROTOCOL_SAS) { - pr_err("Passed SAS Initiator Port %s does not match target port protoid: %s\n", - i_port, scsiback_dump_proto_id(tport_wwn)); - return -EINVAL; - } - port_ptr = &i_port[0]; - goto check_newline; - } - ptr = strstr(i_port, "fc."); - if (ptr) { - if (tport_wwn->tport_proto_id != SCSI_PROTOCOL_FCP) { - pr_err("Passed FCP Initiator Port %s does not match target port protoid: %s\n", - i_port, scsiback_dump_proto_id(tport_wwn)); - return -EINVAL; - } - port_ptr = &i_port[3]; /* Skip over "fc." */ - goto check_newline; - } - ptr = strstr(i_port, "iqn."); - if (ptr) { - if (tport_wwn->tport_proto_id != SCSI_PROTOCOL_ISCSI) { - pr_err("Passed iSCSI Initiator Port %s does not match target port protoid: %s\n", - i_port, scsiback_dump_proto_id(tport_wwn)); - return -EINVAL; - } - port_ptr = &i_port[0]; - goto check_newline; - } - pr_err("Unable to locate prefix for emulated Initiator Port: %s\n", - i_port); - return -EINVAL; - /* - * Clear any trailing newline for the NAA WWN - */ -check_newline: - if (i_port[strlen(i_port) - 1] == '\n') - i_port[strlen(i_port) - 1] = '\0'; + ret = target_parse_emulated_name(tport_wwn->tport_proto_id, page, + i_port, VSCSI_NAMELEN, &tpt_id_name); + if (ret) + return ret; - ret = scsiback_make_nexus(tpg, port_ptr); + ret = scsiback_make_nexus(tpg, tpt_id_name, i_port); if (ret < 0) return ret; From patchwork Sun May 10 21:57:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539471 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B7FA914C0 for ; Sun, 10 May 2020 21:58:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A0B1C20801 for ; Sun, 10 May 2020 21:58:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="FqPGAZLh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729484AbgEJV6J (ORCPT ); Sun, 10 May 2020 17:58:09 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:51738 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729477AbgEJV6I (ORCPT ); Sun, 10 May 2020 17:58:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147887; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bUkG9t562FY69NCrVRDdoSAcdF75ZLnLXa6jrtMNPnM=; b=FqPGAZLhKFuvOu8ny+p2EanZfTFVOAFRkpbcswmmTlAy2ZGQBMWO554aCq2QCOt2/NQ2eG +RshQkRn000hYYNtvw37WmLSNrW9WSVf3/mrqL3FIDA69ZgGWpqUyKNixZ7caBQS/tXeqf d1h2JMBngR+2AB5yiZyxxnuYNlWebqQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-448-rYCs7i0-M1Stx-raCuRX4g-1; Sun, 10 May 2020 17:58:03 -0400 X-MC-Unique: rYCs7i0-M1Stx-raCuRX4g-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E16DB107ACCA; Sun, 10 May 2020 21:58:01 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 149851002382; Sun, 10 May 2020 21:58:00 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 07/15] iscsi target: setup transport_id Date: Sun, 10 May 2020 16:57:36 -0500 Message-Id: <20200510215744.21999-8-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org The iscsi target does its own session setup. This patch updates the driver so it sets up the transport id. Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke --- drivers/target/iscsi/iscsi_target_nego.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c index 685d771..c44613a2 100644 --- a/drivers/target/iscsi/iscsi_target_nego.c +++ b/drivers/target/iscsi/iscsi_target_nego.c @@ -1032,6 +1032,20 @@ static void iscsi_initiatorname_tolower( } } +static int iscsi_setup_i_tpt_id(struct iscsi_session *sess, char *iname) +{ + char isid_buf[13]; + + sprintf(isid_buf, "%6phN", sess->isid); + + sess->se_sess->tpt_id = target_create_transport_id(SCSI_PROTOCOL_ISCSI, + iname, isid_buf); + if (!sess->se_sess->tpt_id) + return -ENOMEM; + + return 0; +} + /* * Processes the first Login Request.. */ @@ -1260,11 +1274,21 @@ int iscsi_target_locate_portal( tag_size = sizeof(struct iscsi_cmd) + conn->conn_transport->priv_size; ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size); - if (ret < 0) { - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, - ISCSI_LOGIN_STATUS_NO_RESOURCES); - ret = -1; + if (ret < 0) + goto return_oom; + + if (conn->tpg != iscsit_global->discovery_tpg) { + if (iscsi_setup_i_tpt_id(sess, i_buf)) + /* tags and nacl released when session is freed */ + goto return_oom; } + + goto out; + +return_oom: + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, + ISCSI_LOGIN_STATUS_NO_RESOURCES); + ret = -1; out: kfree(tmpbuf); return ret; From patchwork Sun May 10 21:57:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539473 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0A2DC186E for ; Sun, 10 May 2020 21:58:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E70B120801 for ; Sun, 10 May 2020 21:58:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="csbuiJXB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729478AbgEJV6K (ORCPT ); Sun, 10 May 2020 17:58:10 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:21794 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729471AbgEJV6J (ORCPT ); Sun, 10 May 2020 17:58:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147888; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PZrWSCPYOQkVLPby+SpEg4W1WGSJ+XmZjUu304SKXz0=; b=csbuiJXBq6Jz+txlvN2Kce3uRJsNCAFS4MxFwFCSJY6pylM2fL+3kvP0RvLD2gWmT88lwc CpGHSalEGwWpb5gcGU8PDXGX4Rkd/YV8dNfbie6zbH/6mZpa96VHG2IR9xzv1w1BxZ1SSW UPHCzbWfT1Xes7llaiSKBnrTdDoXNh4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-373-SAcTsozZNdCNUzUZwnGViA-1; Sun, 10 May 2020 17:58:04 -0400 X-MC-Unique: SAcTsozZNdCNUzUZwnGViA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id F3F9B107ACF2; Sun, 10 May 2020 21:58:02 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B92A1002382; Sun, 10 May 2020 21:58:02 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 08/15] target: use tpt_id in target_stat_iport_port_ident_show Date: Sun, 10 May 2020 16:57:37 -0500 Message-Id: <20200510215744.21999-9-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org Use the tpt_id session id instead of sess_get_initiator_sid. Note that for userspace compat this patch continues the behavior: 1. Still add the "+i+" even if there is no session_id. 2. Use the acl initiatorname instead of the transportID port/addr/name. Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke --- drivers/target/target_core_stat.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/target/target_core_stat.c b/drivers/target/target_core_stat.c index 237309d..3eb1b9b 100644 --- a/drivers/target/target_core_stat.c +++ b/drivers/target/target_core_stat.c @@ -1308,9 +1308,7 @@ static ssize_t target_stat_iport_port_ident_show(struct config_item *item, struct se_lun_acl *lacl = iport_to_lacl(item); struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_session *se_sess; - struct se_portal_group *tpg; ssize_t ret; - unsigned char buf[64]; spin_lock_irq(&nacl->nacl_sess_lock); se_sess = nacl->nacl_sess; @@ -1319,13 +1317,9 @@ static ssize_t target_stat_iport_port_ident_show(struct config_item *item, return -ENODEV; } - tpg = nacl->se_tpg; - /* scsiAttIntrPortName+scsiAttIntrPortIdentifier */ - memset(buf, 0, 64); - if (tpg->se_tpg_tfo->sess_get_initiator_sid != NULL) - tpg->se_tpg_tfo->sess_get_initiator_sid(se_sess, buf, 64); - - ret = snprintf(page, PAGE_SIZE, "%s+i+%s\n", nacl->initiatorname, buf); + ret = snprintf(page, PAGE_SIZE, "%s+i+%s\n", nacl->initiatorname, + se_sess->tpt_id->session_id ? se_sess->tpt_id->session_id : + ""); spin_unlock_irq(&nacl->nacl_sess_lock); return ret; } From patchwork Sun May 10 21:57:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539469 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7AA0B17EA for ; Sun, 10 May 2020 21:58:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6318420801 for ; Sun, 10 May 2020 21:58:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="NwSDv6Lc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729316AbgEJV6K (ORCPT ); Sun, 10 May 2020 17:58:10 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:24957 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729475AbgEJV6I (ORCPT ); Sun, 10 May 2020 17:58:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147887; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L3wWkL2TnneEw0vOVZ9a6Fq5CsqtDwdDaC9jjBVGHJQ=; b=NwSDv6LcN2MDFUI6EmNLVI0lJFSZvYNxW7Bxa1asBeGx9KfjIq2AnVaaw3EZMhEqKvPiKL xOdQdhsKqZd12pAIYrLZOChZstLjhM3EugEkt4kjWebWoApTQfoN2ecuqKDssqmHZvZ2uu 9PUKIbqBzyiwXZWcetdGFi+Gzylvk1A= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-318-2v7mdZinNi-p1AykHv-q9g-1; Sun, 10 May 2020 17:58:05 -0400 X-MC-Unique: 2v7mdZinNi-p1AykHv-q9g-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 058541899521; Sun, 10 May 2020 21:58:04 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2A9B41002382; Sun, 10 May 2020 21:58:03 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 09/15] target: drop sess_get_initiator_sid from PR code Date: Sun, 10 May 2020 16:57:38 -0500 Message-Id: <20200510215744.21999-10-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org Use the transport id session id in the PR related code. Signed-off-by: Mike Christie Reviewed-by: Hannes Reinecke --- drivers/target/target_core_pr.c | 23 ++++------------------- drivers/target/target_core_transport.c | 11 ++++------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c index cd2d32f..fbe3638 100644 --- a/drivers/target/target_core_pr.c +++ b/drivers/target/target_core_pr.c @@ -1204,17 +1204,7 @@ static struct t10_pr_registration *core_scsi3_locate_pr_reg( struct se_node_acl *nacl, struct se_session *sess) { - struct se_portal_group *tpg = nacl->se_tpg; - unsigned char buf[PR_REG_ISID_LEN], *isid_ptr = NULL; - - if (tpg->se_tpg_tfo->sess_get_initiator_sid != NULL) { - memset(&buf[0], 0, PR_REG_ISID_LEN); - tpg->se_tpg_tfo->sess_get_initiator_sid(sess, &buf[0], - PR_REG_ISID_LEN); - isid_ptr = &buf[0]; - } - - return __core_scsi3_locate_pr_reg(dev, nacl, isid_ptr); + return __core_scsi3_locate_pr_reg(dev, nacl, sess->tpt_id->session_id); } static void core_scsi3_put_pr_reg(struct t10_pr_registration *pr_reg) @@ -1592,7 +1582,7 @@ static void core_scsi3_lunacl_undepend_item(struct se_dev_entry *se_deve) * SCSI Intiatior TransportID w/ ISIDs is enforced * for fabric modules (iSCSI) requiring them. */ - if (tpg->se_tpg_tfo->sess_get_initiator_sid && + if (se_sess->tpt_id->session_id && dev->dev_attrib.enforce_pr_isids && !iport_ptr) { pr_warn("SPC-PR: enforce_pr_isids is set but a isid has not been sent in the SPEC_I_PT data for %s.", @@ -2057,7 +2047,7 @@ static sense_reason_t core_scsi3_update_and_write_aptpl(struct se_device *dev, b struct se_portal_group *se_tpg; struct t10_pr_registration *pr_reg, *pr_reg_p, *pr_reg_tmp; struct t10_reservation *pr_tmpl = &dev->t10_pr; - unsigned char isid_buf[PR_REG_ISID_LEN], *isid_ptr = NULL; + unsigned char *isid_ptr = NULL; sense_reason_t ret = TCM_NO_SENSE; int pr_holder = 0, type; @@ -2067,12 +2057,7 @@ static sense_reason_t core_scsi3_update_and_write_aptpl(struct se_device *dev, b } se_tpg = se_sess->se_tpg; - if (se_tpg->se_tpg_tfo->sess_get_initiator_sid) { - memset(&isid_buf[0], 0, PR_REG_ISID_LEN); - se_tpg->se_tpg_tfo->sess_get_initiator_sid(se_sess, &isid_buf[0], - PR_REG_ISID_LEN); - isid_ptr = &isid_buf[0]; - } + isid_ptr = se_sess->tpt_id->session_id; /* * Follow logic from spc4r17 Section 5.7.7, Register Behaviors Table 47 */ diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index fb00fcc..fdf84db 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -343,7 +343,7 @@ void __transport_register_session( void *fabric_sess_ptr) { const struct target_core_fabric_ops *tfo = se_tpg->se_tpg_tfo; - unsigned char buf[PR_REG_ISID_LEN]; + unsigned char *sid; unsigned long flags; se_sess->se_tpg = se_tpg; @@ -374,12 +374,9 @@ void __transport_register_session( * If the fabric module supports an ISID based TransportID, * save this value in binary from the fabric I_T Nexus now. */ - if (se_tpg->se_tpg_tfo->sess_get_initiator_sid != NULL) { - memset(&buf[0], 0, PR_REG_ISID_LEN); - se_tpg->se_tpg_tfo->sess_get_initiator_sid(se_sess, - &buf[0], PR_REG_ISID_LEN); - se_sess->sess_bin_isid = get_unaligned_be64(&buf[0]); - } + sid = se_sess->tpt_id->session_id; + if (sid) + se_sess->sess_bin_isid = get_unaligned_be64(sid); spin_lock_irqsave(&se_nacl->nacl_sess_lock, flags); /* From patchwork Sun May 10 21:57:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539475 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E021814B4 for ; Sun, 10 May 2020 21:58:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C695720801 for ; Sun, 10 May 2020 21:58:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="agJs1XaV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729492AbgEJV6M (ORCPT ); Sun, 10 May 2020 17:58:12 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:29504 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729475AbgEJV6M (ORCPT ); Sun, 10 May 2020 17:58:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147890; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OjrEKjHStef/vmj8x4h0oU9Y/oJsgiJvtuP+8HwDxug=; b=agJs1XaV6B2ZyU6/5edJX5icMSsR59gJ+Jhu2dtFYXyBY9ybU/nwNpRc42F4LO8kReE2gU kvpdjvX51svPyFE96ehJTSQiVfGxILVjkBX6wFsWUBsfsBWlfYWX8YcESP7EwLpvsLUspG aiJD02zVMtXVc81/s5fwokLAKzdE1aY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-410-PHlaTi0OMaCZSp2y8fGomA-1; Sun, 10 May 2020 17:58:06 -0400 X-MC-Unique: PHlaTi0OMaCZSp2y8fGomA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1976D8015CE; Sun, 10 May 2020 21:58:05 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 353171002382; Sun, 10 May 2020 21:58:04 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 10/15] target: drop sess_get_initiator_sid Date: Sun, 10 May 2020 16:57:39 -0500 Message-Id: <20200510215744.21999-11-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org sess_get_initiator_sid is no longer used. Drop it. Signed-off-by: Mike Christie Reviewed-by: Bart Van Assche Reviewed-by: Hannes Reinecke --- drivers/infiniband/ulp/srpt/ib_srpt.c | 1 - drivers/scsi/qla2xxx/tcm_qla2xxx.c | 2 -- drivers/target/iscsi/iscsi_target_configfs.c | 13 ------------- drivers/target/tcm_fc/tfc_conf.c | 1 - drivers/usb/gadget/function/f_tcm.c | 1 - drivers/vhost/scsi.c | 1 - drivers/xen/xen-scsiback.c | 1 - include/target/target_core_fabric.h | 6 ------ 8 files changed, 26 deletions(-) diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index d107f63..3cda73c 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -3844,7 +3844,6 @@ static ssize_t srpt_wwn_version_show(struct config_item *item, char *buf) .check_stop_free = srpt_check_stop_free, .close_session = srpt_close_session, .sess_get_index = srpt_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = srpt_write_pending, .set_default_node_attributes = srpt_set_default_node_attrs, .get_cmd_state = srpt_get_tcm_cmd_state, diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 7b21809..fff695a 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -1852,7 +1852,6 @@ static ssize_t tcm_qla2xxx_wwn_version_show(struct config_item *item, .release_cmd = tcm_qla2xxx_release_cmd, .close_session = tcm_qla2xxx_close_session, .sess_get_index = tcm_qla2xxx_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = tcm_qla2xxx_write_pending, .set_default_node_attributes = tcm_qla2xxx_set_default_node_attrs, .get_cmd_state = tcm_qla2xxx_get_cmd_state, @@ -1892,7 +1891,6 @@ static ssize_t tcm_qla2xxx_wwn_version_show(struct config_item *item, .release_cmd = tcm_qla2xxx_release_cmd, .close_session = tcm_qla2xxx_close_session, .sess_get_index = tcm_qla2xxx_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = tcm_qla2xxx_write_pending, .set_default_node_attributes = tcm_qla2xxx_set_default_node_attrs, .get_cmd_state = tcm_qla2xxx_get_cmd_state, diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index 0fa1d57..4513740 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c @@ -1349,18 +1349,6 @@ static u32 lio_sess_get_index(struct se_session *se_sess) return sess->session_index; } -static u32 lio_sess_get_initiator_sid( - struct se_session *se_sess, - unsigned char *buf, - u32 size) -{ - struct iscsi_session *sess = se_sess->fabric_sess_ptr; - /* - * iSCSI Initiator Session Identifier from RFC-3720. - */ - return snprintf(buf, size, "%6phN", sess->isid); -} - static int lio_queue_data_in(struct se_cmd *se_cmd) { struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); @@ -1545,7 +1533,6 @@ static void lio_release_cmd(struct se_cmd *se_cmd) .release_cmd = lio_release_cmd, .close_session = lio_tpg_close_session, .sess_get_index = lio_sess_get_index, - .sess_get_initiator_sid = lio_sess_get_initiator_sid, .write_pending = lio_write_pending, .set_default_node_attributes = lio_set_default_node_attributes, .get_cmd_state = iscsi_get_cmd_state, diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c index 1a38c98..870b7bb 100644 --- a/drivers/target/tcm_fc/tfc_conf.c +++ b/drivers/target/tcm_fc/tfc_conf.c @@ -427,7 +427,6 @@ static u32 ft_tpg_get_inst_index(struct se_portal_group *se_tpg) .release_cmd = ft_release_cmd, .close_session = ft_sess_close, .sess_get_index = ft_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = ft_write_pending, .set_default_node_attributes = ft_set_default_node_attr, .get_cmd_state = ft_get_cmd_state, diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c index cab3036..e81bdbd 100644 --- a/drivers/usb/gadget/function/f_tcm.c +++ b/drivers/usb/gadget/function/f_tcm.c @@ -1716,7 +1716,6 @@ static int usbg_check_stop_free(struct se_cmd *se_cmd) .tpg_get_inst_index = usbg_tpg_get_inst_index, .release_cmd = usbg_release_cmd, .sess_get_index = usbg_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = usbg_send_write_request, .set_default_node_attributes = usbg_set_default_node_attrs, .get_cmd_state = usbg_get_cmd_state, diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index 37f66f8..d7c9bfc 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c @@ -2245,7 +2245,6 @@ static void vhost_scsi_drop_tport(struct se_wwn *wwn) .release_cmd = vhost_scsi_release_cmd, .check_stop_free = vhost_scsi_check_stop_free, .sess_get_index = vhost_scsi_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = vhost_scsi_write_pending, .set_default_node_attributes = vhost_scsi_set_default_node_attrs, .get_cmd_state = vhost_scsi_get_cmd_state, diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index f70b6da..883b15c 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c @@ -1769,7 +1769,6 @@ static int scsiback_check_false(struct se_portal_group *se_tpg) .check_stop_free = scsiback_check_stop_free, .release_cmd = scsiback_release_cmd, .sess_get_index = scsiback_sess_get_index, - .sess_get_initiator_sid = NULL, .write_pending = scsiback_write_pending, .set_default_node_attributes = scsiback_set_default_node_attrs, .get_cmd_state = scsiback_get_cmd_state, diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index 0113e1c..ced377f 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -67,12 +67,6 @@ struct target_core_fabric_ops { void (*release_cmd)(struct se_cmd *); void (*close_session)(struct se_session *); u32 (*sess_get_index)(struct se_session *); - /* - * Used only for SCSI fabrics that contain multi-value TransportIDs - * (like iSCSI). All other SCSI fabrics should set this to NULL. - */ - u32 (*sess_get_initiator_sid)(struct se_session *, - unsigned char *, u32); int (*write_pending)(struct se_cmd *); void (*set_default_node_attributes)(struct se_node_acl *); int (*get_cmd_state)(struct se_cmd *); From patchwork Sun May 10 21:57:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539479 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2934C14B4 for ; Sun, 10 May 2020 21:58:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0C25A20801 for ; Sun, 10 May 2020 21:58:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="dKYchL9d" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729504AbgEJV6O (ORCPT ); Sun, 10 May 2020 17:58:14 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:27290 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729471AbgEJV6O (ORCPT ); Sun, 10 May 2020 17:58:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147891; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xOqpIsWLwt2WAvE4nlMyqP+uXICtDkEBl3b/pg52ybM=; b=dKYchL9dQE4+cXv6UY6jfjDvtdwxuNZmX2CkP60qsAYeo0MIDR8wKc7jV93mwhNTKxuyr1 9JaTjRQ7oRokg4Vc15nWnMe0bJy81kBVcA55vRhBuiYJUzmL3HinTADNnypZ54m3WeWJxt tww2P18/5rQ8A+Ekhdwrnllnnq2MWgI= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-435-Sfel2PK8MVCHi4OGusdRBg-1; Sun, 10 May 2020 17:58:07 -0400 X-MC-Unique: Sfel2PK8MVCHi4OGusdRBg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3F52C8014C0; Sun, 10 May 2020 21:58:06 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 470B21002382; Sun, 10 May 2020 21:58:05 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie , Greg Kroah-Hartman Subject: [PATCH 11/15] target: add sysfs support Date: Sun, 10 May 2020 16:57:40 -0500 Message-Id: <20200510215744.21999-12-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org These next two patches add a sysfs interface that reports the target layer's I_T nexuses/sessions. For the non-SCSI people cc'd, this just means we are reporting a server's connections to remote clients. This patch adds the upper level dirs which shows/organizes our local port (tpgts below) and the connection (session below). The next patch will then add the dirs/files for each connection/session which exports info like ACL/permissions and SCSI port values. Here is the general layout: [sys]# tree scsi_target/ scsi_target/ |-- fabric/target module | `-- target name | `-- tpgt_$target_port_group_number | `-- sessions | `-- initiator name - session ID number | |-- acl | `-- transport_id | |-- name | |-- proto | `-- session_id Here is an example with the scsi target layer's iSCSI driver: scsi_target/ |-- iscsi | `-- iqn.1999-09.com.tcmu:minna | `-- tpgt_1 | `-- sessions | `-- iqn.2005-03.com.ceph:ini1-1 | |-- acl | `-- transport_id | |-- name | |-- proto | `-- session_id |-- fc |-- loopback |-- qla2xxx_tcm Note/Question for Greg: We are not exporting info in the upper level dirs like "fabric/target module", "target name", tpgt, etc and just need those dirs to be able to organize/view the endpoints of the session. So, in this patch I made a new top level dir scsi_target and made the other dirs with kobject_create_and_add. It looks like we could also add device structs in the target related structs, use classes, and build the tree/hierarchy that way too. It was not clear to me when to use one or the other. Cc: Greg Kroah-Hartman Signed-off-by: Mike Christie --- V3: - delay tpg deletion to allow fabric modules time to remove their sessions. - Added root sessions dir for easier lookup if userspace has the session id. V2: - rename top level dir to scsi_target drivers/target/target_core_configfs.c | 30 +++++++++++++++++++++ drivers/target/target_core_fabric_configfs.c | 40 ++++++++++++++++++++++++++++ drivers/target/target_core_internal.h | 1 + include/target/target_core_base.h | 4 +++ 4 files changed, 75 insertions(+) diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index ff82b21f..3eb2566 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c @@ -63,6 +63,9 @@ pr_debug("Setup generic %s\n", __stringify(_name)); \ } +static struct kobject *tcm_core_kobj; +static struct kobject *tcm_core_sessions_kobj; + extern struct t10_alua_lu_gp *default_lu_gp; static LIST_HEAD(g_tf_list); @@ -245,6 +248,11 @@ static struct config_group *target_core_register_fabric( } pr_debug("Target_Core_ConfigFS: REGISTER -> Located fabric:" " %s\n", tf->tf_ops->fabric_name); + + tf->kobj = kobject_create_and_add(name, tcm_core_kobj); + if (!tf->kobj) + goto dec_tf; + /* * On a successful target_core_get_fabric() look, the returned * struct target_fabric_configfs *tf will contain a usage reference. @@ -261,6 +269,10 @@ static struct config_group *target_core_register_fabric( pr_debug("Target_Core_ConfigFS: REGISTER -> Allocated Fabric: %s\n", config_item_name(&tf->tf_group.cg_item)); return &tf->tf_group; + +dec_tf: + atomic_dec(&tf->tf_access_cnt); + return ERR_PTR(-EINVAL); } /* @@ -283,6 +295,9 @@ static void target_core_deregister_fabric( pr_debug("Target_Core_ConfigFS: DEREGISTER -> Releasing ci" " %s\n", config_item_name(item)); + kobject_del(tf->kobj); + kobject_put(tf->kobj); + configfs_remove_default_groups(&tf->tf_group); config_item_put(item); } @@ -3538,6 +3553,15 @@ static int __init target_core_init_configfs(void) target_init_dbroot(); + tcm_core_kobj = kobject_create_and_add("scsi_target", NULL); + if (!tcm_core_kobj) + goto out; + + tcm_core_sessions_kobj = kobject_create_and_add("sessions", + tcm_core_kobj); + if (!tcm_core_sessions_kobj) + goto out; + return 0; out: @@ -3555,6 +3579,12 @@ static int __init target_core_init_configfs(void) static void __exit target_core_exit_configfs(void) { + kobject_del(tcm_core_sessions_kobj); + kobject_put(tcm_core_sessions_kobj); + + kobject_del(tcm_core_kobj); + kobject_put(tcm_core_kobj); + configfs_remove_default_groups(&alua_lu_gps_group); configfs_remove_default_groups(&alua_group); configfs_remove_default_groups(&target_core_hbagroup); diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c index ee85602..efa01b3 100644 --- a/drivers/target/target_core_fabric_configfs.c +++ b/drivers/target/target_core_fabric_configfs.c @@ -807,8 +807,23 @@ static void target_fabric_tpg_release(struct config_item *item) struct se_portal_group, tpg_group); struct se_wwn *wwn = se_tpg->se_tpg_wwn; struct target_fabric_configfs *tf = wwn->wwn_tf; + struct kobject *sess_kobj, *tpg_kobj; + + /* + * Some fabric modules remove the session from the drop_tpg callout + * so don't remove these parent dirs until after the session is + * removed. + */ + sess_kobj = se_tpg->sessions_kobj; + tpg_kobj = se_tpg->kobj; tf->tf_ops->fabric_drop_tpg(se_tpg); + + kobject_del(sess_kobj); + kobject_put(sess_kobj); + + kobject_del(tpg_kobj); + kobject_put(tpg_kobj); } static struct configfs_item_operations target_fabric_tpg_base_item_ops = { @@ -838,6 +853,14 @@ static struct config_group *target_fabric_make_tpg( if (!se_tpg || IS_ERR(se_tpg)) return ERR_PTR(-EINVAL); + se_tpg->kobj = kobject_create_and_add(name, wwn->kobj); + if (!se_tpg->kobj) + goto drop_tpg; + + se_tpg->sessions_kobj = kobject_create_and_add("sessions", se_tpg->kobj); + if (!se_tpg->sessions_kobj) + goto del_tpg_kobj; + config_group_init_type_name(&se_tpg->tpg_group, name, &tf->tf_tpg_base_cit); @@ -872,6 +895,13 @@ static struct config_group *target_fabric_make_tpg( &se_tpg->tpg_group); return &se_tpg->tpg_group; + +del_tpg_kobj: + kobject_del(se_tpg->kobj); + kobject_put(se_tpg->kobj); +drop_tpg: + tf->tf_ops->fabric_drop_tpg(se_tpg); + return ERR_PTR(-EINVAL); } static void target_fabric_drop_tpg( @@ -927,6 +957,7 @@ static struct config_group *target_fabric_make_wwn( struct target_fabric_configfs *tf = container_of(group, struct target_fabric_configfs, tf_group); struct se_wwn *wwn; + int ret; if (!tf->tf_ops->fabric_make_wwn) { pr_err("tf->tf_ops.fabric_make_wwn is NULL\n"); @@ -938,6 +969,9 @@ static struct config_group *target_fabric_make_wwn( return ERR_PTR(-EINVAL); wwn->wwn_tf = tf; + wwn->kobj = kobject_create_and_add(name, tf->kobj); + if (!wwn->kobj) + goto drop_wwn; config_group_init_type_name(&wwn->wwn_group, name, &tf->tf_tpg_cit); @@ -948,6 +982,10 @@ static struct config_group *target_fabric_make_wwn( if (tf->tf_ops->add_wwn_groups) tf->tf_ops->add_wwn_groups(wwn); return &wwn->wwn_group; + +drop_wwn: + tf->tf_ops->fabric_drop_wwn(wwn); + return ERR_PTR(ret); } static void target_fabric_drop_wwn( @@ -957,6 +995,8 @@ static void target_fabric_drop_wwn( struct se_wwn *wwn = container_of(to_config_group(item), struct se_wwn, wwn_group); + kobject_del(wwn->kobj); + kobject_put(wwn->kobj); configfs_remove_default_groups(&wwn->wwn_group); config_item_put(item); } diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h index 8533444..16ae020 100644 --- a/drivers/target/target_core_internal.h +++ b/drivers/target/target_core_internal.h @@ -27,6 +27,7 @@ struct target_backend { struct target_fabric_configfs { atomic_t tf_access_cnt; struct list_head tf_list; + struct kobject *kobj; struct config_group tf_group; struct config_group tf_disc_group; const struct target_core_fabric_ops *tf_ops; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 2e79cce..b7f7e02 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -8,6 +8,7 @@ #include #include /* struct semaphore */ #include +#include #define TARGET_CORE_VERSION "v5.0" @@ -902,6 +903,8 @@ struct se_portal_group { /* Pointer to $FABRIC_MOD dependent code */ const struct target_core_fabric_ops *se_tpg_tfo; struct se_wwn *se_tpg_wwn; + struct kobject *kobj; + struct kobject *sessions_kobj; struct config_group tpg_group; struct config_group tpg_lun_group; struct config_group tpg_np_group; @@ -940,6 +943,7 @@ struct se_wwn { void *priv; struct config_group wwn_group; struct config_group fabric_stat_group; + struct kobject *kobj; }; static inline void atomic_inc_mb(atomic_t *v) From patchwork Sun May 10 21:57:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539489 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BC9A814C0 for ; Sun, 10 May 2020 21:58:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9FD5420801 for ; Sun, 10 May 2020 21:58:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Fdnk4D/w" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729475AbgEJV6R (ORCPT ); Sun, 10 May 2020 17:58:17 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:36429 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729477AbgEJV6P (ORCPT ); Sun, 10 May 2020 17:58:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147892; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C4HdEIlq2jztu2Cxj4xpajeqclQc1tCgeFxi9hfE6V0=; b=Fdnk4D/w4DIrws2MryXy92w6sEJD2cPdVD9LBDrSOU6dVw5O/GIKV1d0mp84moU64TAgPi hoWp/yKAcMroCv0gz3lwa0TtVuBiUqEpyldjbCno9YtJa7168iGcoqdt60nip5XrZ+NaXy Yb/gTWXTpoRbWBJtVkFW6f3gW2tt/LU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-396-iIJI_W7JOY6GZirwz733Cg-1; Sun, 10 May 2020 17:58:08 -0400 X-MC-Unique: iIJI_W7JOY6GZirwz733Cg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5E13468E; Sun, 10 May 2020 21:58:07 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6BFD81002382; Sun, 10 May 2020 21:58:06 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie , Greg Kroah-Hartman Subject: [PATCH 12/15] target: add sysfs session helper functions Date: Sun, 10 May 2020 16:57:41 -0500 Message-Id: <20200510215744.21999-13-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org This patch adds helpers to add/remove a dir per session. There is only 2 files/dirs initially. acl - name of acl session is accessed through. transport_id - Contains fabric module specific transportID values. See sysfs-scsi-target below for more info on each file/dir. scsi_target/ |-- iscsi | `-- iqn.1999-09.com.tcmu:minna | `-- tpgt_1 | `-- sessions | `-- iqn.2005-03.com.ceph:ini1-1 | |-- acl | `-- transport_id | |-- name | |-- proto | `-- session_id Cc: Greg Kroah-Hartman Signed-off-by: Mike Christie --- V4: - add Documentation/ABI - use initaitor port prefix instead of generic "session" V3: - add session symlink - use simple ida. V2: - Fix extra newline - Copy data that's exported to sysfs so we do not have to worry about configfs and sysfs refcounts. - adds back the global sid allocator instead of the per tpg one because in the future we will want to tag target_core_user commands with the session id. This will be needed when tcmu devices are mapped to multiple fabric modules or tpgs and they userspace needs to track the different session to command mappings for commands like PRs. Documentation/ABI/testing/sysfs-scsi-target | 46 ++++++ drivers/target/Makefile | 1 + drivers/target/target_core_configfs.c | 2 +- drivers/target/target_core_internal.h | 5 + drivers/target/target_core_sysfs.c | 233 ++++++++++++++++++++++++++++ drivers/target/target_core_transport.c | 35 ++++- include/target/target_core_base.h | 6 + include/target/target_core_fabric.h | 8 +- 8 files changed, 328 insertions(+), 8 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-scsi-target create mode 100644 drivers/target/target_core_sysfs.c diff --git a/Documentation/ABI/testing/sysfs-scsi-target b/Documentation/ABI/testing/sysfs-scsi-target new file mode 100644 index 0000000..0408798 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-scsi-target @@ -0,0 +1,46 @@ +What: /sys/scsi_target////sessions/ +Date: May 9, 2020 +KernelVersion: 5.8 +Contact: linux-scsi@vger.kernel.org +Description: The sessions dir contains a dir for each I_T Nexus. The name of + the dir is initiator port name followed by an integer that is + unique across all fabrics. The dir contains files that export + info like the ACL being used, SCSI port values, and fabric and + transport specific values. + +What: /sys/scsi_target//.../sessions//acl +Date: May 9, 2020 +KernelVersion: 5.8 +Contact: linux-scsi@vger.kernel.org +Description: Returns the name of the ACL that was used to validate login or + an empty string if no user created ACL was used. + +What: /sys/scsi_target//.../sessions//.../sessions//.../sessions//.../sessions/ +#include + +#include + +#include +#include +#include "target_core_internal.h" + +static void target_sysfs_session_release(struct kobject *kobj) +{ + struct se_session *se_sess = container_of(kobj, struct se_session, kobj); + + __target_free_session(se_sess); +} + +struct session_attr { + struct attribute attr; + ssize_t (*show)(struct se_session *, char *); + ssize_t (*store)(struct se_session *, const char *, size_t); +}; + +#define to_session(atr) container_of((atr), struct session_attr, attr) + +static ssize_t session_acl_show(struct se_session *se_sess, char *page) +{ + return snprintf(page, PAGE_SIZE, "%s", se_sess->acl_name ? + se_sess->acl_name : ""); +} + +static struct session_attr session_acl_attr = { + .attr = { .name = "acl", .mode = S_IRUGO }, + .show = session_acl_show, +}; + +/* Default attrs common to all fabric modules */ +static struct attribute *session_attrs[] = { + &session_acl_attr.attr, + NULL +}; + +static const struct attribute_group session_group = { + .attrs = session_attrs, +}; + +/* transportID attrs */ +#define tpt_id_attr_show(name, fmt_str) \ +static ssize_t show_##name(struct se_session *se_sess, char *page) \ +{ \ + return snprintf(page, PAGE_SIZE, fmt_str, se_sess->tpt_id->name); \ +} + +#define tpt_id_attr(name, fmt_str) \ + tpt_id_attr_show(name, fmt_str) \ +static struct session_attr tpt_id_##name##_attr = \ + __ATTR(name, S_IRUGO, show_##name, NULL) + +tpt_id_attr(proto, "0x%x"); +tpt_id_attr(name, "%s"); + +static ssize_t session_id_show(struct se_session *se_sess, char *page) +{ + if (!se_sess->tpt_id->session_id) + return 0; + + return snprintf(page, PAGE_SIZE, "0x%s", se_sess->tpt_id->session_id); +} + +static struct session_attr tpt_id_session_id_attr = { + .attr = { .name = "session_id", .mode = S_IRUGO }, + .show = session_id_show, +}; + +/* + * The drivers that emulate iSCSI like loop/vhost/xen do not support format=1, + * so we only separate based on format and not also proto. + */ +static struct attribute *tpt_id_fmt0_attrs[] = { + &tpt_id_proto_attr.attr, + &tpt_id_name_attr.attr, + NULL +}; + +static const struct attribute_group tpt_id_fmt0_group = { + .name = "transport_id", + .attrs = tpt_id_fmt0_attrs, +}; + +static struct attribute *tpt_id_fmt1_attrs[] = { + &tpt_id_proto_attr.attr, + &tpt_id_name_attr.attr, + &tpt_id_session_id_attr.attr, + NULL +}; + +static const struct attribute_group tpt_id_fmt1_group = { + .name = "transport_id", + .attrs = tpt_id_fmt1_attrs, +}; + +static ssize_t +session_attr_store(struct kobject *kobj, struct attribute *attr, + const char *page, size_t length) +{ + struct se_session *se_sess = container_of(kobj, struct se_session, kobj); + struct session_attr *sess_attr = to_session(attr); + + if (!sess_attr->store) + return -ENOSYS; + + return sess_attr->store(se_sess, page, length); +} + +static ssize_t +session_attr_show(struct kobject *kobj, struct attribute *attr, char *page) +{ + struct se_session *se_sess = container_of(kobj, struct se_session, kobj); + struct session_attr *sess_attr = to_session(attr); + + if (!sess_attr->show) + return -ENOSYS; + + return sess_attr->show(se_sess, page); +} + +static const struct sysfs_ops session_sysfs_ops = { + .show = session_attr_show, + .store = session_attr_store, +}; + +static const struct attribute_group *def_session_groups[] = { + &session_group, + NULL +}; + +static struct kobj_type session_ktype = { + .sysfs_ops = &session_sysfs_ops, + .release = target_sysfs_session_release, + .default_groups = def_session_groups, +}; + +void target_sysfs_init_session(struct se_session *se_sess) +{ + kobject_init(&se_sess->kobj, &session_ktype); +} + +static int add_transport_id_attrs(struct se_session *se_sess) +{ + if (se_sess->tpt_id->session_id) + return sysfs_create_group(&se_sess->kobj, &tpt_id_fmt1_group); + else + return sysfs_create_group(&se_sess->kobj, &tpt_id_fmt0_group); +} + +static void remove_transport_id_attrs(struct se_session *se_sess) +{ + if (se_sess->tpt_id->session_id) + sysfs_remove_group(&se_sess->kobj, &tpt_id_fmt1_group); + else + sysfs_remove_group(&se_sess->kobj, &tpt_id_fmt0_group); +} + +int target_sysfs_add_session(struct se_portal_group *se_tpg, + struct se_session *se_sess) +{ + int ret; + + /* + * Copy ACL name so we don't have to worry about mixing configfs + * and sysfs refcounts. + */ + if (!se_sess->se_node_acl->dynamic_node_acl) { + se_sess->acl_name = kstrdup(se_sess->se_node_acl->initiatorname, + GFP_KERNEL); + if (!se_sess->acl_name) + return -ENOMEM; + } + + ret = kobject_add(&se_sess->kobj, se_tpg->sessions_kobj, "%s-%d", + se_sess->tpt_id->name, se_sess->sid); + if (ret) { + pr_err("Could not add session%d to sysfs. Error %d.\n", + se_sess->sid, ret); + goto free_acl_name; + } + + ret = add_transport_id_attrs(se_sess); + if (ret) + goto del_kobj; + + if (se_sess->tfo->session_attrs) { + ret = sysfs_create_group(&se_sess->kobj, + se_sess->tfo->session_attrs); + if (ret) + goto rm_tpt_id_grps; + } + + ret = sysfs_create_link(tcm_core_sessions_kobj, &se_sess->kobj, + se_sess->kobj.name); + if (ret) + goto rm_fabric_grps; + + se_sess->sysfs_added = true; + return 0; + +rm_fabric_grps: + if (se_sess->tfo->session_attrs) + sysfs_remove_group(&se_sess->kobj, se_sess->tfo->session_attrs); +rm_tpt_id_grps: + remove_transport_id_attrs(se_sess); +del_kobj: + kobject_del(&se_sess->kobj); +free_acl_name: + kfree(se_sess->acl_name); + se_sess->acl_name = NULL; + return ret; +} +EXPORT_SYMBOL(target_sysfs_add_session); + +void target_sysfs_remove_session(struct se_session *se_sess) +{ + /* discovery sessions are normally not added to sysfs */ + if (!se_sess->sysfs_added) + return; + + sysfs_remove_link(tcm_core_sessions_kobj, se_sess->kobj.name); + if (se_sess->tfo->session_attrs) + sysfs_remove_group(&se_sess->kobj, se_sess->tfo->session_attrs); + remove_transport_id_attrs(se_sess); + kobject_del(&se_sess->kobj); +} +EXPORT_SYMBOL(target_sysfs_remove_session); diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index fdf84db..04cb042 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -42,6 +42,7 @@ static struct workqueue_struct *target_completion_wq; static struct kmem_cache *se_sess_cache; +static DEFINE_IDA(se_sess_ida); struct kmem_cache *se_ua_cache; struct kmem_cache *t10_pr_reg_cache; struct kmem_cache *t10_alua_lu_gp_cache; @@ -251,14 +252,27 @@ struct se_session *transport_alloc_session(enum target_prot_op sup_prot_ops) " se_sess_cache\n"); return ERR_PTR(-ENOMEM); } - ret = transport_init_session(se_sess); + + ret = ida_simple_get(&se_sess_ida, 1, 0, GFP_KERNEL); if (ret < 0) { - kmem_cache_free(se_sess_cache, se_sess); - return ERR_PTR(ret); + pr_err("Unable to allocate session index.\n"); + goto free_sess; } - se_sess->sup_prot_ops = sup_prot_ops; + se_sess->sid = ret; + + ret = transport_init_session(se_sess); + if (ret < 0) + goto free_sid; + se_sess->sup_prot_ops = sup_prot_ops; + target_sysfs_init_session(se_sess); return se_sess; + +free_sid: + ida_simple_remove(&se_sess_ida, se_sess->sid); +free_sess: + kmem_cache_free(se_sess_cache, se_sess); + return ERR_PTR(ret); } EXPORT_SYMBOL(transport_alloc_session); @@ -597,12 +611,21 @@ void transport_free_session(struct se_session *se_sess) sbitmap_queue_free(&se_sess->sess_tag_pool); kvfree(se_sess->sess_cmd_map); } - target_free_transport_id(se_sess->tpt_id); percpu_ref_exit(&se_sess->cmd_count); - kmem_cache_free(se_sess_cache, se_sess); + kobject_put(&se_sess->kobj); } EXPORT_SYMBOL(transport_free_session); +void __target_free_session(struct se_session *se_sess) +{ + kfree(se_sess->acl_name); + target_free_transport_id(se_sess->tpt_id); + + ida_simple_remove(&se_sess_ida, se_sess->sid); + + kmem_cache_free(se_sess_cache, se_sess); +} + static int target_release_res(struct se_device *dev, void *data) { struct se_session *sess = data; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index b7f7e02..34d89cb 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -9,6 +9,7 @@ #include /* struct semaphore */ #include #include +#include #define TARGET_CORE_VERSION "v5.0" @@ -626,6 +627,7 @@ struct se_session { enum target_prot_op sup_prot_ops; enum target_prot_type sess_prot_type; struct se_node_acl *se_node_acl; + char *acl_name; struct se_portal_group *se_tpg; void *fabric_sess_ptr; struct percpu_ref cmd_count; @@ -636,6 +638,10 @@ struct se_session { wait_queue_head_t cmd_list_wq; void *sess_cmd_map; struct sbitmap_queue sess_tag_pool; + struct kobject kobj; + int sid; + bool sysfs_added; + const struct target_core_fabric_ops *tfo; }; struct se_device; diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index ced377f..f876a05 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -74,6 +74,10 @@ struct target_core_fabric_ops { int (*queue_status)(struct se_cmd *); void (*queue_tm_rsp)(struct se_cmd *); void (*aborted_task)(struct se_cmd *); + + /* Optional session management and sysfs callouts */ + const struct attribute_group *session_attrs; + /* * fabric module calls for target_core_fabric_configfs.c */ @@ -145,7 +149,9 @@ void transport_register_session(struct se_portal_group *, void target_put_nacl(struct se_node_acl *); void transport_deregister_session_configfs(struct se_session *); void transport_deregister_session(struct se_session *); - +void target_sysfs_remove_session(struct se_session *se_sess); +int target_sysfs_add_session(struct se_portal_group *se_tpg, + struct se_session *se_sess); void transport_init_se_cmd(struct se_cmd *, const struct target_core_fabric_ops *, From patchwork Sun May 10 21:57:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539483 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 78F2817EA for ; Sun, 10 May 2020 21:58:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 573BA20801 for ; Sun, 10 May 2020 21:58:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="jKHgrx3/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729509AbgEJV6P (ORCPT ); Sun, 10 May 2020 17:58:15 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:36650 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729495AbgEJV6P (ORCPT ); Sun, 10 May 2020 17:58:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zB1rd/h3i3G/pLOyLugNRXNm9zWMXwOA7nmWGzzbG+c=; b=jKHgrx3/ENP3spXAl1DiJnLTp0Gx+MmNIX5+cZcw7erVtGgBMssl/PzCVgFUxfgSCCY7Tv 6ej3w4Yhs3vYAFneP+gu6Xm9vi5wK0OiH4YsSLKCohx2o2Tc6rNl3Xpwjvo8ajC4W9A4+u +UqUSwN+Mo24T2iXKoFcVtRCEesMK18= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-388-KBlfF6PJO6Oa-l7GdChqkw-1; Sun, 10 May 2020 17:58:09 -0400 X-MC-Unique: KBlfF6PJO6Oa-l7GdChqkw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 66A8C1005510; Sun, 10 May 2020 21:58:08 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8E1501002382; Sun, 10 May 2020 21:58:07 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 13/15] target: add target_setup_session sysfs support Date: Sun, 10 May 2020 16:57:42 -0500 Message-Id: <20200510215744.21999-14-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org This adds a session dir per session for users of target_setup_session. Signed-off-by: Mike Christie --- drivers/target/target_core_transport.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 04cb042..7bfeab2 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -457,6 +457,7 @@ struct se_session * if (IS_ERR(sess)) return sess; + sess->tfo = tpg->se_tpg_tfo; sess->tpt_id = target_create_transport_id(tpg->proto_id, tpt_id_name, NULL); @@ -471,6 +472,10 @@ struct se_session * rc = -EACCES; goto free_sess; } + + rc = target_sysfs_add_session(tpg, sess); + if (rc) + goto free_sess; /* * Go ahead and perform any remaining fabric setup that is * required before transport_register_session(). @@ -478,12 +483,14 @@ struct se_session * if (callback != NULL) { rc = callback(tpg, sess, private); if (rc) - goto free_sess; + goto rm_sysfs; } transport_register_session(tpg, sess->se_node_acl, sess, private); return sess; +rm_sysfs: + target_sysfs_remove_session(sess); free_sess: transport_free_session(sess); return ERR_PTR(rc); @@ -674,6 +681,7 @@ void transport_deregister_session(struct se_session *se_sess) void target_remove_session(struct se_session *se_sess) { + target_sysfs_remove_session(se_sess); transport_deregister_session_configfs(se_sess); transport_deregister_session(se_sess); } From patchwork Sun May 10 21:57:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539493 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 21649186E for ; Sun, 10 May 2020 21:58:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 095812080C for ; Sun, 10 May 2020 21:58:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="XSOxUp/Y" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729515AbgEJV6Q (ORCPT ); Sun, 10 May 2020 17:58:16 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:44542 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729503AbgEJV6Q (ORCPT ); Sun, 10 May 2020 17:58:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147894; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Zz6krBf2Ix60rJx6HA/JfqgDeMycXLjzXeXFme7uBVw=; b=XSOxUp/YhfJHXHnFvUbS9Yb9lv0kS3SIZk6pFJY3JchpC4+SfGldyfxew6RDuwMJ4zTzS5 fCpWj05Yc/qF+Msr7a8BO+hmSccQIXFUWGohG1gnb8zqX4RuQOCyb3QwaXfBGh7Tg1e0+W ripkCwwzoR94Bo6NzPrEtcRZQkrDv30= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-174-jsFI3l7KMn-YHbkT9Xj2KQ-1; Sun, 10 May 2020 17:58:10 -0400 X-MC-Unique: jsFI3l7KMn-YHbkT9Xj2KQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6ECC7835B8B; Sun, 10 May 2020 21:58:09 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 948A610002CD; Sun, 10 May 2020 21:58:08 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 14/15] iscsi target: use session sysfs helpers Date: Sun, 10 May 2020 16:57:43 -0500 Message-Id: <20200510215744.21999-15-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org The iscsi target login process breaks up session allocation and registration, so it does not use target_setup_session like every one else. This converts iscsi to use the session sysfs helpers and drops its session id to use the common one. Signed-off-by: Mike Christie --- V3: - Fix goto use. Actually moved sysfs addition call to after nego to avoid sysfs additions when login ends up failing. drivers/target/iscsi/iscsi_target.c | 3 +-- drivers/target/iscsi/iscsi_target_configfs.c | 4 +--- drivers/target/iscsi/iscsi_target_login.c | 16 ++-------------- drivers/target/iscsi/iscsi_target_nego.c | 8 ++++++++ drivers/target/iscsi/iscsi_target_stat.c | 3 +-- include/target/iscsi/iscsi_target_core.h | 2 -- 6 files changed, 13 insertions(+), 23 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 59379d6..e04aba4 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c @@ -49,7 +49,6 @@ static DEFINE_MUTEX(np_lock); static struct idr tiqn_idr; -DEFINE_IDA(sess_ida); struct mutex auth_id_lock; struct iscsit_global *iscsit_global; @@ -4359,6 +4358,7 @@ int iscsit_close_session(struct iscsi_session *sess) iscsit_stop_time2retain_timer(sess); spin_unlock_bh(&se_tpg->session_lock); + target_sysfs_remove_session(sess->se_sess); /* * transport_deregister_session_configfs() will clear the * struct se_node_acl->nacl_sess pointer now as a iscsi_np process context @@ -4403,7 +4403,6 @@ int iscsit_close_session(struct iscsi_session *sess) pr_debug("Decremented number of active iSCSI Sessions on" " iSCSI TPG: %hu to %u\n", tpg->tpgt, tpg->nsessions); - ida_free(&sess_ida, sess->session_index); kfree(sess->sess_ops); sess->sess_ops = NULL; spin_unlock_bh(&se_tpg->session_lock); diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index 4513740..9301793 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c @@ -1344,9 +1344,7 @@ static int iscsi_get_cmd_state(struct se_cmd *se_cmd) static u32 lio_sess_get_index(struct se_session *se_sess) { - struct iscsi_session *sess = se_sess->fabric_sess_ptr; - - return sess->session_index; + return se_sess->sid; } static int lio_queue_data_in(struct se_cmd *se_cmd) diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c index 731ee67..619ea09 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c @@ -257,7 +257,6 @@ static int iscsi_login_zero_tsih_s1( { struct iscsi_session *sess = NULL; struct iscsi_login_req *pdu = (struct iscsi_login_req *)buf; - int ret; sess = kzalloc(sizeof(struct iscsi_session), GFP_KERNEL); if (!sess) { @@ -291,15 +290,6 @@ static int iscsi_login_zero_tsih_s1( timer_setup(&sess->time2retain_timer, iscsit_handle_time2retain_timeout, 0); - ret = ida_alloc(&sess_ida, GFP_KERNEL); - if (ret < 0) { - pr_err("Session ID allocation failed %d\n", ret); - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, - ISCSI_LOGIN_STATUS_NO_RESOURCES); - goto free_sess; - } - - sess->session_index = ret; sess->creation_time = get_jiffies_64(); /* * The FFP CmdSN window values will be allocated from the TPG's @@ -313,7 +303,7 @@ static int iscsi_login_zero_tsih_s1( ISCSI_LOGIN_STATUS_NO_RESOURCES); pr_err("Unable to allocate memory for" " struct iscsi_sess_ops.\n"); - goto free_id; + goto free_sess; } sess->se_sess = transport_alloc_session(TARGET_PROT_NORMAL); @@ -327,8 +317,6 @@ static int iscsi_login_zero_tsih_s1( free_ops: kfree(sess->sess_ops); -free_id: - ida_free(&sess_ida, sess->session_index); free_sess: kfree(sess); conn->sess = NULL; @@ -1183,8 +1171,8 @@ void iscsi_target_login_sess_out(struct iscsi_conn *conn, if (!zero_tsih || !conn->sess) goto old_sess_out; + target_sysfs_remove_session(conn->sess->se_sess); transport_free_session(conn->sess->se_sess); - ida_free(&sess_ida, conn->sess->session_index); kfree(conn->sess->sess_ops); kfree(conn->sess); conn->sess = NULL; diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c index c44613a2..c5184c0 100644 --- a/drivers/target/iscsi/iscsi_target_nego.c +++ b/drivers/target/iscsi/iscsi_target_nego.c @@ -359,6 +359,13 @@ static int iscsi_target_do_tx_login_io(struct iscsi_conn *conn, struct iscsi_log ISCSI_LOGIN_STATUS_NO_RESOURCES); return -1; } + + if (target_sysfs_add_session(&conn->tpg->tpg_se_tpg, + conn->sess->se_sess)) { + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, + ISCSI_LOGIN_STATUS_NO_RESOURCES); + return -1; + } } if (conn->conn_transport->iscsit_put_login_tx(conn, login, @@ -1276,6 +1283,7 @@ int iscsi_target_locate_portal( ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size); if (ret < 0) goto return_oom; + sess->se_sess->tfo = &iscsi_ops; if (conn->tpg != iscsit_global->discovery_tpg) { if (iscsi_setup_i_tpt_id(sess, i_buf)) diff --git a/drivers/target/iscsi/iscsi_target_stat.c b/drivers/target/iscsi/iscsi_target_stat.c index 35e75a3..8167fdc 100644 --- a/drivers/target/iscsi/iscsi_target_stat.c +++ b/drivers/target/iscsi/iscsi_target_stat.c @@ -630,8 +630,7 @@ static ssize_t iscsi_stat_sess_indx_show(struct config_item *item, char *page) if (se_sess) { sess = se_sess->fabric_sess_ptr; if (sess) - ret = snprintf(page, PAGE_SIZE, "%u\n", - sess->session_index); + ret = snprintf(page, PAGE_SIZE, "%u\n", se_sess->sid); } spin_unlock_bh(&se_nacl->nacl_sess_lock); diff --git a/include/target/iscsi/iscsi_target_core.h b/include/target/iscsi/iscsi_target_core.h index 591cd9e..443c5af 100644 --- a/include/target/iscsi/iscsi_target_core.h +++ b/include/target/iscsi/iscsi_target_core.h @@ -657,8 +657,6 @@ struct iscsi_session { /* LIO specific session ID */ u32 sid; char auth_type[8]; - /* unique within the target */ - int session_index; /* Used for session reference counting */ int session_usage_count; int session_waiting_on_uc; From patchwork Sun May 10 21:57:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Christie X-Patchwork-Id: 11539487 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3727214B4 for ; Sun, 10 May 2020 21:58:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1681F20801 for ; Sun, 10 May 2020 21:58:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="UkxESsIg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729511AbgEJV6Q (ORCPT ); Sun, 10 May 2020 17:58:16 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:54495 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729499AbgEJV6P (ORCPT ); Sun, 10 May 2020 17:58:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589147894; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=73B47rK/1hANiFhwilrqSkOa67kuNrrkKbujEQ9pR58=; b=UkxESsIg1boxTsReDrOb+fzN2tA4FHVt4tzPMMeYz6bArx4Gfe5xrkh+2t1rFowMPE641B f2nqFreflAlcqvSrXCOoRZu9rQlXUquxA93Q5vdufSnJoPhkMmMFJWiXTd/GkpX8CNB/2+ E12BYo/yWiTMac3PMBWB/Mdxv2FHaiE= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-43-er81B7dSNo-J2Z73H1y3Rw-1; Sun, 10 May 2020 17:58:11 -0400 X-MC-Unique: er81B7dSNo-J2Z73H1y3Rw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 74A9780058A; Sun, 10 May 2020 21:58:10 +0000 (UTC) Received: from rh2.redhat.com (ovpn-113-0.rdu2.redhat.com [10.10.113.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9B7801002382; Sun, 10 May 2020 21:58:09 +0000 (UTC) From: Mike Christie To: bvanassche@acm.org, bstroesser@ts.fujitsu.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org Cc: Mike Christie Subject: [PATCH 15/15] target: drop sess_get_index Date: Sun, 10 May 2020 16:57:44 -0500 Message-Id: <20200510215744.21999-16-mchristi@redhat.com> In-Reply-To: <20200510215744.21999-1-mchristi@redhat.com> References: <20200510215744.21999-1-mchristi@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org LIO now handles session id allocation so drop the callout. Signed-off-by: Mike Christie --- drivers/infiniband/ulp/srpt/ib_srpt.c | 15 --------------- drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | 6 ------ drivers/scsi/qla2xxx/tcm_qla2xxx.c | 7 ------- drivers/target/iscsi/iscsi_target_configfs.c | 6 ------ drivers/target/loopback/tcm_loop.c | 6 ------ drivers/target/sbp/sbp_target.c | 6 ------ drivers/target/target_core_configfs.c | 4 ---- drivers/target/target_core_stat.c | 5 +---- drivers/target/tcm_fc/tfc_conf.c | 1 - drivers/target/tcm_fc/tfc_sess.c | 7 ------- drivers/usb/gadget/function/f_tcm.c | 6 ------ drivers/vhost/scsi.c | 6 ------ drivers/xen/xen-scsiback.c | 6 ------ include/target/target_core_fabric.h | 1 - 14 files changed, 1 insertion(+), 81 deletions(-) diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index 3cda73c..7fe76e0 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -3353,20 +3353,6 @@ static void srpt_close_session(struct se_session *se_sess) srpt_disconnect_ch_sync(ch); } -/** - * srpt_sess_get_index - return the value of scsiAttIntrPortIndex (SCSI-MIB) - * @se_sess: SCSI target session. - * - * A quote from RFC 4455 (SCSI-MIB) about this MIB object: - * This object represents an arbitrary integer used to uniquely identify a - * particular attached remote initiator port to a particular SCSI target port - * within a particular SCSI target device within a particular SCSI instance. - */ -static u32 srpt_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static void srpt_set_default_node_attrs(struct se_node_acl *nacl) { } @@ -3843,7 +3829,6 @@ static ssize_t srpt_wwn_version_show(struct config_item *item, char *buf) .release_cmd = srpt_release_cmd, .check_stop_free = srpt_check_stop_free, .close_session = srpt_close_session, - .sess_get_index = srpt_sess_get_index, .write_pending = srpt_write_pending, .set_default_node_attributes = srpt_set_default_node_attrs, .get_cmd_state = srpt_get_tcm_cmd_state, diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c index 31459f3..8d37375 100644 --- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c +++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c @@ -3739,11 +3739,6 @@ static void ibmvscsis_release_cmd(struct se_cmd *se_cmd) spin_unlock_bh(&vscsi->intr_lock); } -static u32 ibmvscsis_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static int ibmvscsis_write_pending(struct se_cmd *se_cmd) { struct ibmvscsis_cmd *cmd = container_of(se_cmd, struct ibmvscsis_cmd, @@ -4034,7 +4029,6 @@ static ssize_t ibmvscsis_tpg_enable_store(struct config_item *item, .tpg_get_inst_index = ibmvscsis_tpg_get_inst_index, .check_stop_free = ibmvscsis_check_stop_free, .release_cmd = ibmvscsis_release_cmd, - .sess_get_index = ibmvscsis_sess_get_index, .write_pending = ibmvscsis_write_pending, .set_default_node_attributes = ibmvscsis_set_default_node_attrs, .get_cmd_state = ibmvscsis_get_cmd_state, diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index fff695a..8a68085 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -377,11 +377,6 @@ static void tcm_qla2xxx_close_session(struct se_session *se_sess) tcm_qla2xxx_put_sess(sess); } -static u32 tcm_qla2xxx_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static int tcm_qla2xxx_write_pending(struct se_cmd *se_cmd) { struct qla_tgt_cmd *cmd = container_of(se_cmd, @@ -1851,7 +1846,6 @@ static ssize_t tcm_qla2xxx_wwn_version_show(struct config_item *item, .check_stop_free = tcm_qla2xxx_check_stop_free, .release_cmd = tcm_qla2xxx_release_cmd, .close_session = tcm_qla2xxx_close_session, - .sess_get_index = tcm_qla2xxx_sess_get_index, .write_pending = tcm_qla2xxx_write_pending, .set_default_node_attributes = tcm_qla2xxx_set_default_node_attrs, .get_cmd_state = tcm_qla2xxx_get_cmd_state, @@ -1890,7 +1884,6 @@ static ssize_t tcm_qla2xxx_wwn_version_show(struct config_item *item, .check_stop_free = tcm_qla2xxx_check_stop_free, .release_cmd = tcm_qla2xxx_release_cmd, .close_session = tcm_qla2xxx_close_session, - .sess_get_index = tcm_qla2xxx_sess_get_index, .write_pending = tcm_qla2xxx_write_pending, .set_default_node_attributes = tcm_qla2xxx_set_default_node_attrs, .get_cmd_state = tcm_qla2xxx_get_cmd_state, diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index 9301793..141455e 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c @@ -1342,11 +1342,6 @@ static int iscsi_get_cmd_state(struct se_cmd *se_cmd) return cmd->i_state; } -static u32 lio_sess_get_index(struct se_session *se_sess) -{ - return se_sess->sid; -} - static int lio_queue_data_in(struct se_cmd *se_cmd) { struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); @@ -1530,7 +1525,6 @@ static void lio_release_cmd(struct se_cmd *se_cmd) .check_stop_free = lio_check_stop_free, .release_cmd = lio_release_cmd, .close_session = lio_tpg_close_session, - .sess_get_index = lio_sess_get_index, .write_pending = lio_write_pending, .set_default_node_attributes = lio_set_default_node_attributes, .get_cmd_state = iscsi_get_cmd_state, diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index 64e5f1f..8daa424 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c @@ -512,11 +512,6 @@ static u32 tcm_loop_get_inst_index(struct se_portal_group *se_tpg) return 1; } -static u32 tcm_loop_sess_get_index(struct se_session *se_sess) -{ - return 1; -} - static void tcm_loop_set_default_node_attributes(struct se_node_acl *se_acl) { return; @@ -1093,7 +1088,6 @@ static ssize_t tcm_loop_wwn_version_show(struct config_item *item, char *page) .tpg_get_inst_index = tcm_loop_get_inst_index, .check_stop_free = tcm_loop_check_stop_free, .release_cmd = tcm_loop_release_cmd, - .sess_get_index = tcm_loop_sess_get_index, .write_pending = tcm_loop_write_pending, .set_default_node_attributes = tcm_loop_set_default_node_attributes, .get_cmd_state = tcm_loop_get_cmd_state, diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c index 2cac4d9..782c326 100644 --- a/drivers/target/sbp/sbp_target.c +++ b/drivers/target/sbp/sbp_target.c @@ -1708,11 +1708,6 @@ static void sbp_release_cmd(struct se_cmd *se_cmd) sbp_free_request(req); } -static u32 sbp_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static int sbp_write_pending(struct se_cmd *se_cmd) { struct sbp_target_request *req = container_of(se_cmd, @@ -2309,7 +2304,6 @@ static ssize_t sbp_tpg_attrib_max_logins_per_lun_store(struct config_item *item, .tpg_check_prod_mode_write_protect = sbp_check_false, .tpg_get_inst_index = sbp_tpg_get_inst_index, .release_cmd = sbp_release_cmd, - .sess_get_index = sbp_sess_get_index, .write_pending = sbp_write_pending, .set_default_node_attributes = sbp_set_default_node_attrs, .get_cmd_state = sbp_get_cmd_state, diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index 7a9f607..b3e52eb 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c @@ -400,10 +400,6 @@ static int target_fabric_tf_ops_check(const struct target_core_fabric_ops *tfo) pr_err("Missing tfo->release_cmd()\n"); return -EINVAL; } - if (!tfo->sess_get_index) { - pr_err("Missing tfo->sess_get_index()\n"); - return -EINVAL; - } if (!tfo->write_pending) { pr_err("Missing tfo->write_pending()\n"); return -EINVAL; diff --git a/drivers/target/target_core_stat.c b/drivers/target/target_core_stat.c index 3eb1b9b..621dc17 100644 --- a/drivers/target/target_core_stat.c +++ b/drivers/target/target_core_stat.c @@ -1264,7 +1264,6 @@ static ssize_t target_stat_iport_indx_show(struct config_item *item, struct se_lun_acl *lacl = iport_to_lacl(item); struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_session *se_sess; - struct se_portal_group *tpg; ssize_t ret; spin_lock_irq(&nacl->nacl_sess_lock); @@ -1274,10 +1273,8 @@ static ssize_t target_stat_iport_indx_show(struct config_item *item, return -ENODEV; } - tpg = nacl->se_tpg; /* scsiAttIntrPortIndex */ - ret = snprintf(page, PAGE_SIZE, "%u\n", - tpg->se_tpg_tfo->sess_get_index(se_sess)); + ret = snprintf(page, PAGE_SIZE, "%u\n", se_sess->sid); spin_unlock_irq(&nacl->nacl_sess_lock); return ret; } diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c index 870b7bb..747824f 100644 --- a/drivers/target/tcm_fc/tfc_conf.c +++ b/drivers/target/tcm_fc/tfc_conf.c @@ -426,7 +426,6 @@ static u32 ft_tpg_get_inst_index(struct se_portal_group *se_tpg) .check_stop_free = ft_check_stop_free, .release_cmd = ft_release_cmd, .close_session = ft_sess_close, - .sess_get_index = ft_sess_get_index, .write_pending = ft_write_pending, .set_default_node_attributes = ft_set_default_node_attr, .get_cmd_state = ft_get_cmd_state, diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c index 1d1c460..84a2c5d 100644 --- a/drivers/target/tcm_fc/tfc_sess.c +++ b/drivers/target/tcm_fc/tfc_sess.c @@ -326,13 +326,6 @@ void ft_sess_close(struct se_session *se_sess) synchronize_rcu(); /* let transport deregister happen */ } -u32 ft_sess_get_index(struct se_session *se_sess) -{ - struct ft_sess *sess = se_sess->fabric_sess_ptr; - - return sess->port_id; /* XXX TBD probably not what is needed */ -} - u32 ft_sess_get_port_name(struct se_session *se_sess, unsigned char *buf, u32 len) { diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c index e81bdbd..7bdd7c5 100644 --- a/drivers/usb/gadget/function/f_tcm.c +++ b/drivers/usb/gadget/function/f_tcm.c @@ -1287,11 +1287,6 @@ static void usbg_release_cmd(struct se_cmd *se_cmd) target_free_tag(se_sess, se_cmd); } -static u32 usbg_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static void usbg_set_default_node_attrs(struct se_node_acl *nacl) { } @@ -1715,7 +1710,6 @@ static int usbg_check_stop_free(struct se_cmd *se_cmd) .tpg_check_prod_mode_write_protect = usbg_check_false, .tpg_get_inst_index = usbg_tpg_get_inst_index, .release_cmd = usbg_release_cmd, - .sess_get_index = usbg_sess_get_index, .write_pending = usbg_send_write_request, .set_default_node_attributes = usbg_set_default_node_attrs, .get_cmd_state = usbg_get_cmd_state, diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index d7c9bfc..14f7c3bf 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c @@ -340,11 +340,6 @@ static void vhost_scsi_release_cmd(struct se_cmd *se_cmd) target_free_tag(se_sess, se_cmd); } -static u32 vhost_scsi_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static int vhost_scsi_write_pending(struct se_cmd *se_cmd) { /* Go ahead and process the write immediately */ @@ -2244,7 +2239,6 @@ static void vhost_scsi_drop_tport(struct se_wwn *wwn) .tpg_get_inst_index = vhost_scsi_tpg_get_inst_index, .release_cmd = vhost_scsi_release_cmd, .check_stop_free = vhost_scsi_check_stop_free, - .sess_get_index = vhost_scsi_sess_get_index, .write_pending = vhost_scsi_write_pending, .set_default_node_attributes = vhost_scsi_set_default_node_attrs, .get_cmd_state = vhost_scsi_get_cmd_state, diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 883b15c..923c96a 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c @@ -1392,11 +1392,6 @@ static void scsiback_release_cmd(struct se_cmd *se_cmd) target_free_tag(se_cmd->se_sess, se_cmd); } -static u32 scsiback_sess_get_index(struct se_session *se_sess) -{ - return 0; -} - static int scsiback_write_pending(struct se_cmd *se_cmd) { /* Go ahead and process the write immediately */ @@ -1768,7 +1763,6 @@ static int scsiback_check_false(struct se_portal_group *se_tpg) .tpg_get_inst_index = scsiback_tpg_get_inst_index, .check_stop_free = scsiback_check_stop_free, .release_cmd = scsiback_release_cmd, - .sess_get_index = scsiback_sess_get_index, .write_pending = scsiback_write_pending, .set_default_node_attributes = scsiback_set_default_node_attrs, .get_cmd_state = scsiback_get_cmd_state, diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index f876a05..54ce800 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -66,7 +66,6 @@ struct target_core_fabric_ops { int (*check_stop_free)(struct se_cmd *); void (*release_cmd)(struct se_cmd *); void (*close_session)(struct se_session *); - u32 (*sess_get_index)(struct se_session *); int (*write_pending)(struct se_cmd *); void (*set_default_node_attributes)(struct se_node_acl *); int (*get_cmd_state)(struct se_cmd *);