mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome