From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Nicholas A. Bellinger" <nab@daterainc.com>
Cc: target-devel <target-devel@vger.kernel.org>,
linux-scsi <linux-scsi@vger.kernel.org>,
lkml <linux-kernel@vger.kernel.org>,
Sagi Grimberg <sagig@mellanox.com>,
Christoph Hellwig <hch@lst.de>, Hannes Reinecke <hare@suse.de>,
Andy Grover <agrover@redhat.com>,
Vasu Dev <vasu.dev@linux.intel.com>, Vu Pham <vu@mellanox.com>,
Nicholas Bellinger <nab@linux-iscsi.org>
Subject: Re: [PATCH-for-4.6 3/6] vhost/scsi: Convert to target_alloc_session usage
Date: Sun, 10 Jan 2016 23:32:23 +0200 [thread overview]
Message-ID: <20160110233137-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1452458668-11034-4-git-send-email-nab@daterainc.com>
On Sun, Jan 10, 2016 at 08:44:25PM +0000, Nicholas A. Bellinger wrote:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> Cc: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Pls merge this patch yourself to avoid dependency issues.
> ---
> drivers/vhost/scsi.c | 99 ++++++++++++++++++++++------------------------------
> 1 file changed, 41 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
> index 29cfc57..cd5f20f 100644
> --- a/drivers/vhost/scsi.c
> +++ b/drivers/vhost/scsi.c
> @@ -1664,8 +1664,7 @@ static void vhost_scsi_port_unlink(struct se_portal_group *se_tpg,
> mutex_unlock(&vhost_scsi_mutex);
> }
>
> -static void vhost_scsi_free_cmd_map_res(struct vhost_scsi_nexus *nexus,
> - struct se_session *se_sess)
> +static void vhost_scsi_free_cmd_map_res(struct se_session *se_sess)
> {
> struct vhost_scsi_cmd *tv_cmd;
> unsigned int i;
> @@ -1721,98 +1720,82 @@ static struct configfs_attribute *vhost_scsi_tpg_attrib_attrs[] = {
> NULL,
> };
>
> -static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
> - const char *name)
> +static int vhost_scsi_nexus_cb(struct se_portal_group *se_tpg,
> + struct se_session *se_sess, void *p)
> {
> - struct se_portal_group *se_tpg;
> - struct se_session *se_sess;
> - struct vhost_scsi_nexus *tv_nexus;
> struct vhost_scsi_cmd *tv_cmd;
> unsigned int i;
>
> - mutex_lock(&tpg->tv_tpg_mutex);
> - if (tpg->tpg_nexus) {
> - mutex_unlock(&tpg->tv_tpg_mutex);
> - pr_debug("tpg->tpg_nexus already exists\n");
> - return -EEXIST;
> - }
> - se_tpg = &tpg->se_tpg;
> -
> - tv_nexus = kzalloc(sizeof(struct vhost_scsi_nexus), GFP_KERNEL);
> - if (!tv_nexus) {
> - mutex_unlock(&tpg->tv_tpg_mutex);
> - pr_err("Unable to allocate struct vhost_scsi_nexus\n");
> - return -ENOMEM;
> - }
> - /*
> - * Initialize the struct se_session pointer and setup tagpool
> - * for struct vhost_scsi_cmd descriptors
> - */
> - tv_nexus->tvn_se_sess = transport_init_session_tags(
> - VHOST_SCSI_DEFAULT_TAGS,
> - sizeof(struct vhost_scsi_cmd),
> - TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS);
> - if (IS_ERR(tv_nexus->tvn_se_sess)) {
> - mutex_unlock(&tpg->tv_tpg_mutex);
> - kfree(tv_nexus);
> - return -ENOMEM;
> - }
> - se_sess = tv_nexus->tvn_se_sess;
> for (i = 0; i < VHOST_SCSI_DEFAULT_TAGS; i++) {
> tv_cmd = &((struct vhost_scsi_cmd *)se_sess->sess_cmd_map)[i];
>
> tv_cmd->tvc_sgl = kzalloc(sizeof(struct scatterlist) *
> VHOST_SCSI_PREALLOC_SGLS, GFP_KERNEL);
> if (!tv_cmd->tvc_sgl) {
> - mutex_unlock(&tpg->tv_tpg_mutex);
> pr_err("Unable to allocate tv_cmd->tvc_sgl\n");
> goto out;
> }
>
> tv_cmd->tvc_upages = kzalloc(sizeof(struct page *) *
> - VHOST_SCSI_PREALLOC_UPAGES, GFP_KERNEL);
> + VHOST_SCSI_PREALLOC_UPAGES, GFP_KERNEL);
> if (!tv_cmd->tvc_upages) {
> - mutex_unlock(&tpg->tv_tpg_mutex);
> pr_err("Unable to allocate tv_cmd->tvc_upages\n");
> goto out;
> }
>
> tv_cmd->tvc_prot_sgl = kzalloc(sizeof(struct scatterlist) *
> - VHOST_SCSI_PREALLOC_PROT_SGLS, GFP_KERNEL);
> + VHOST_SCSI_PREALLOC_PROT_SGLS, GFP_KERNEL);
> if (!tv_cmd->tvc_prot_sgl) {
> - mutex_unlock(&tpg->tv_tpg_mutex);
> pr_err("Unable to allocate tv_cmd->tvc_prot_sgl\n");
> goto out;
> }
> }
> + return 0;
> +out:
> + vhost_scsi_free_cmd_map_res(se_sess);
> + return -ENOMEM;
> +}
> +
> +static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
> + const char *name)
> +{
> + struct se_portal_group *se_tpg;
> + struct vhost_scsi_nexus *tv_nexus;
> +
> + mutex_lock(&tpg->tv_tpg_mutex);
> + if (tpg->tpg_nexus) {
> + mutex_unlock(&tpg->tv_tpg_mutex);
> + pr_debug("tpg->tpg_nexus already exists\n");
> + return -EEXIST;
> + }
> + se_tpg = &tpg->se_tpg;
> +
> + tv_nexus = kzalloc(sizeof(struct vhost_scsi_nexus), GFP_KERNEL);
> + if (!tv_nexus) {
> + mutex_unlock(&tpg->tv_tpg_mutex);
> + pr_err("Unable to allocate struct vhost_scsi_nexus\n");
> + return -ENOMEM;
> + }
> /*
> * Since we are running in 'demo mode' this call with generate a
> * struct se_node_acl for the vhost_scsi struct se_portal_group with
> * the SCSI Initiator port name of the passed configfs group 'name'.
> */
> - tv_nexus->tvn_se_sess->se_node_acl = core_tpg_check_initiator_node_acl(
> - se_tpg, (unsigned char *)name);
> - if (!tv_nexus->tvn_se_sess->se_node_acl) {
> + tv_nexus->tvn_se_sess = target_alloc_session(&tpg->se_tpg,
> + VHOST_SCSI_DEFAULT_TAGS,
> + sizeof(struct vhost_scsi_cmd),
> + TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS,
> + (unsigned char *)name, tv_nexus,
> + vhost_scsi_nexus_cb);
> + if (IS_ERR(tv_nexus->tvn_se_sess)) {
> mutex_unlock(&tpg->tv_tpg_mutex);
> - pr_debug("core_tpg_check_initiator_node_acl() failed"
> - " for %s\n", name);
> - goto out;
> + kfree(tv_nexus);
> + return -ENOMEM;
> }
> - /*
> - * Now register the TCM vhost virtual I_T Nexus as active.
> - */
> - transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
> - tv_nexus->tvn_se_sess, tv_nexus);
> tpg->tpg_nexus = tv_nexus;
>
> mutex_unlock(&tpg->tv_tpg_mutex);
> return 0;
> -
> -out:
> - vhost_scsi_free_cmd_map_res(tv_nexus, se_sess);
> - transport_free_session(se_sess);
> - kfree(tv_nexus);
> - return -ENOMEM;
> }
>
> static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg)
> @@ -1853,7 +1836,7 @@ static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg)
> " %s Initiator Port: %s\n", vhost_scsi_dump_proto_id(tpg->tport),
> tv_nexus->tvn_se_sess->se_node_acl->initiatorname);
>
> - vhost_scsi_free_cmd_map_res(tv_nexus, se_sess);
> + vhost_scsi_free_cmd_map_res(se_sess);
> /*
> * Release the SCSI I_T Nexus to the emulated vhost Target Port
> */
> --
> 1.9.1
next prev parent reply other threads:[~2016-01-10 21:32 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-10 20:44 [PATCH-for-4.6 0/6] target: Introduce target_alloc_session helper Nicholas A. Bellinger
2016-01-10 20:44 ` [PATCH-for-4.6 1/6] target: Add target_alloc_session() helper function Nicholas A. Bellinger
2016-01-11 22:10 ` Bart Van Assche
2016-01-12 15:11 ` Christoph Hellwig
2016-01-13 8:09 ` Nicholas A. Bellinger
2016-01-13 8:17 ` Christoph Hellwig
2016-01-13 9:22 ` Nicholas A. Bellinger
2016-01-13 9:33 ` Christoph Hellwig
2016-01-13 10:14 ` Nicholas A. Bellinger
2016-01-10 20:44 ` [PATCH-for-4.6 2/6] target: Convert demo-mode only drivers to target_alloc_session Nicholas A. Bellinger
2016-01-10 20:44 ` [PATCH-for-4.6 3/6] vhost/scsi: Convert to target_alloc_session usage Nicholas A. Bellinger
2016-01-10 21:32 ` Michael S. Tsirkin [this message]
2016-01-10 20:44 ` [PATCH-for-4.6 4/6] tcm_qla2xxx: " Nicholas A. Bellinger
2016-01-10 20:44 ` [PATCH-for-4.6 5/6] tcm_fc: " Nicholas A. Bellinger
2016-01-10 20:44 ` [PATCH-for-4.6 6/6] ib_srpt: " Nicholas A. Bellinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160110233137-mutt-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=agrover@redhat.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=nab@daterainc.com \
--cc=nab@linux-iscsi.org \
--cc=sagig@mellanox.com \
--cc=target-devel@vger.kernel.org \
--cc=vasu.dev@linux.intel.com \
--cc=vu@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.