public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Sagi Grimberg <sagig@dev.mellanox.co.il>
To: "Nicholas A. Bellinger" <nab@daterainc.com>,
	target-devel <target-devel@vger.kernel.org>
Cc: linux-scsi <linux-scsi@vger.kernel.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Sagi Grimberg <sagig@mellanox.com>,
	Or Gerlitz <ogerlitz@mellanox.com>,
	Quinn Tran <quinn.tran@qlogic.com>,
	Giridhar Malavali <giridhar.malavali@qlogic.com>,
	Nicholas Bellinger <nab@linux-iscsi.org>
Subject: Re: [PATCH 9/9] target: Enable READ_STRIP emulation in target_complete_ok_work
Date: Mon, 07 Apr 2014 10:49:51 +0300	[thread overview]
Message-ID: <5342589F.6030904@dev.mellanox.co.il> (raw)
In-Reply-To: <1396517753-23546-10-git-send-email-nab@daterainc.com>

On 4/3/2014 12:35 PM, Nicholas A. Bellinger wrote:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> This patch enables the use of READ_STRIP software emulation in
> target_complete_ok_work() code for I/O READs.
>
> This is useful when the fabric does not support READ_STRIP hardware
> offload, but would still like to interact with backend device
> that have T10 PI enabled.
>
> Cc: Martin K. Petersen <martin.petersen@oracle.com>
> Cc: Sagi Grimberg <sagig@mellanox.com>
> Cc: Or Gerlitz <ogerlitz@mellanox.com>
> Cc: Quinn Tran <quinn.tran@qlogic.com>
> Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
> ---
>   drivers/target/target_core_transport.c |   33 ++++++++++++++++++++++++++++++++
>   1 file changed, 33 insertions(+)
>
> diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
> index 530a9e8..a184103 100644
> --- a/drivers/target/target_core_transport.c
> +++ b/drivers/target/target_core_transport.c
> @@ -1905,6 +1905,24 @@ static void transport_handle_queue_full(
>   	schedule_work(&cmd->se_dev->qf_work_queue);
>   }
>   
> +static bool target_check_read_strip(struct se_cmd *cmd)
> +{
> +	sense_reason_t rc;
> +
> +	if (cmd->prot_op != TARGET_PROT_DIN_STRIP)
> +		return false;
> +
> +	if (!(cmd->se_sess->sup_prot_ops & TARGET_PROT_DIN_STRIP)) {
> +		rc = sbc_dif_read_strip(cmd);
> +		if (rc) {
> +			cmd->pi_err = rc;
> +			return true;
> +		}
> +	}
> +
> +	return false;
> +}
> +
>   static void target_complete_ok_work(struct work_struct *work)
>   {
>   	struct se_cmd *cmd = container_of(work, struct se_cmd, work);
> @@ -1969,6 +1987,21 @@ static void target_complete_ok_work(struct work_struct *work)
>   					cmd->data_length;
>   		}
>   		spin_unlock(&cmd->se_lun->lun_sep_lock);
> +		/*
> +		 * Perform READ_STRIP of PI using software emulation when
> +		 * backend had PI enabled, if the transport will not be
> +		 * performing hardware READ_STRIP offload.
> +		 */

You always call read_strip() even if the operation is not READ_STRIP 
(the routine won't do anything in this case).
Personally, I usually prefer to avoid calling a routine rather then 
calling it and perform the checks there.

I suggest:

if (cmd->prot_op == TARGET_PROT_DIN_STRIP &&
     target_check_read_strip(cmd)) {
	ret = transport_send_check_condition_and_sense(cmd, cmd->pi_err, 0);
	...
}


> +		if (target_check_read_strip(cmd)) {
> +			ret = transport_send_check_condition_and_sense(cmd,
> +						cmd->pi_err, 0);
> +			if (ret == -EAGAIN || ret == -ENOMEM)
> +				goto queue_full;
> +
> +			transport_lun_remove_cmd(cmd);
> +			transport_cmd_check_stop_to_fabric(cmd);
> +			return;
> +		}
>   
>   		trace_target_cmd_complete(cmd);
>   		ret = cmd->se_tfo->queue_data_in(cmd);

  reply	other threads:[~2014-04-07  7:49 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-03  9:35 [PATCH 0/9] target: Allow fabric to expose PI + add WRITE_INSERT/READ_STRIP Nicholas A. Bellinger
2014-04-03  9:35 ` [PATCH 1/9] target/iblock: Fix double bioset_integrity_free bug Nicholas A. Bellinger
2014-04-07  7:19   ` Sagi Grimberg
2014-04-03  9:35 ` [PATCH 2/9] target: Pass in transport supported PI at session initialization Nicholas A. Bellinger
2014-04-07  7:28   ` Sagi Grimberg
2014-04-07  8:01     ` Nicholas A. Bellinger
2014-04-03  9:35 ` [PATCH 3/9] target/spc: Only expose PI inquiry bits when supported by fabric Nicholas A. Bellinger
2014-04-07  7:30   ` Sagi Grimberg
2014-04-03  9:35 ` [PATCH 4/9] target/spc: Only expose PI mode page " Nicholas A. Bellinger
2014-04-07  7:31   ` Sagi Grimberg
2014-04-03  9:35 ` [PATCH 5/9] target/sbc: Only expose PI read_cap16 " Nicholas A. Bellinger
2014-04-07  7:32   ` Sagi Grimberg
2014-04-03  9:35 ` [PATCH 6/9] target/sbc: Add sbc_dif_write_insert software emulation Nicholas A. Bellinger
2014-04-07  7:36   ` Sagi Grimberg
2014-04-07  8:07     ` Nicholas A. Bellinger
2014-04-03  9:35 ` [PATCH 7/9] target: Enable WRITE_INSERT emulation in target_execute_cmd Nicholas A. Bellinger
2014-04-07  7:39   ` Sagi Grimberg
2014-04-07  8:11     ` Nicholas A. Bellinger
2014-04-07  8:13       ` sagi grimberg
2014-04-03  9:35 ` [PATCH 8/9] target/sbc: Add sbc_dif_read_strip software emulation Nicholas A. Bellinger
2014-04-07  7:44   ` Sagi Grimberg
2014-04-03  9:35 ` [PATCH 9/9] target: Enable READ_STRIP emulation in target_complete_ok_work Nicholas A. Bellinger
2014-04-07  7:49   ` Sagi Grimberg [this message]
2014-04-07  8:15     ` 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=5342589F.6030904@dev.mellanox.co.il \
    --to=sagig@dev.mellanox.co.il \
    --cc=giridhar.malavali@qlogic.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=nab@daterainc.com \
    --cc=nab@linux-iscsi.org \
    --cc=ogerlitz@mellanox.com \
    --cc=quinn.tran@qlogic.com \
    --cc=sagig@mellanox.com \
    --cc=target-devel@vger.kernel.org \
    /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