diff mbox

[PATCH-v2,08/15] target/file: Add checks for backend DIF emulation

Message ID 1427686104-14231-9-git-send-email-nab@daterainc.com (mailing list archive)
State New, archived
Headers show

Commit Message

Nicholas A. Bellinger March 30, 2015, 3:28 a.m. UTC
From: Nicholas Bellinger <nab@linux-iscsi.org>

Make sure that FILEIO only attempts to use backend DIF emulation
when it's actually enabled at device level.

Cc: Martin Petersen <martin.petersen@oracle.com>
Cc: Sagi Grimberg <sagig@mellanox.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
---
 drivers/target/target_core_file.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Sagi Grimberg March 30, 2015, 8:05 a.m. UTC | #1
On 3/30/2015 6:28 AM, Nicholas A. Bellinger wrote:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> Make sure that FILEIO only attempts to use backend DIF emulation
> when it's actually enabled at device level.
>
> Cc: Martin Petersen <martin.petersen@oracle.com>
> Cc: Sagi Grimberg <sagig@mellanox.com>
> Cc: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
> ---
>   drivers/target/target_core_file.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
> index cd93935..fa54835 100644
> --- a/drivers/target/target_core_file.c
> +++ b/drivers/target/target_core_file.c
> @@ -584,7 +584,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
>   	if (data_direction == DMA_FROM_DEVICE) {
>   		memset(&fd_prot, 0, sizeof(struct fd_prot));
>
> -		if (cmd->prot_type) {
> +		if (cmd->prot_type && dev->dev_attrib.pi_prot_type) {

Maybe it's better to put it in a macro accessible from all backend
devices given that each would check now on (cmd_prot && dev_prot).

>   			ret = fd_do_prot_rw(cmd, &fd_prot, false);
>   			if (ret < 0)
>   				return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
> @@ -592,7 +592,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
>
>   		ret = fd_do_rw(cmd, sgl, sgl_nents, 0);
>
> -		if (ret > 0 && cmd->prot_type) {
> +		if (ret > 0 && cmd->prot_type && dev->dev_attrib.pi_prot_type) {
>   			u32 sectors = cmd->data_length / dev->dev_attrib.block_size;
>
>   			rc = sbc_dif_verify_read(cmd, cmd->t_task_lba, sectors,
> @@ -608,7 +608,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
>   	} else {
>   		memset(&fd_prot, 0, sizeof(struct fd_prot));
>
> -		if (cmd->prot_type) {
> +		if (cmd->prot_type && dev->dev_attrib.pi_prot_type) {
>   			u32 sectors = cmd->data_length / dev->dev_attrib.block_size;
>
>   			ret = fd_do_prot_rw(cmd, &fd_prot, false);
> @@ -646,7 +646,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
>   			vfs_fsync_range(fd_dev->fd_file, start, end, 1);
>   		}
>
> -		if (ret > 0 && cmd->prot_type) {
> +		if (ret > 0 && cmd->prot_type && dev->dev_attrib.pi_prot_type) {
>   			ret = fd_do_prot_rw(cmd, &fd_prot, true);
>   			if (ret < 0)
>   				return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
>

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index cd93935..fa54835 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -584,7 +584,7 @@  fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 	if (data_direction == DMA_FROM_DEVICE) {
 		memset(&fd_prot, 0, sizeof(struct fd_prot));
 
-		if (cmd->prot_type) {
+		if (cmd->prot_type && dev->dev_attrib.pi_prot_type) {
 			ret = fd_do_prot_rw(cmd, &fd_prot, false);
 			if (ret < 0)
 				return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
@@ -592,7 +592,7 @@  fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 
 		ret = fd_do_rw(cmd, sgl, sgl_nents, 0);
 
-		if (ret > 0 && cmd->prot_type) {
+		if (ret > 0 && cmd->prot_type && dev->dev_attrib.pi_prot_type) {
 			u32 sectors = cmd->data_length / dev->dev_attrib.block_size;
 
 			rc = sbc_dif_verify_read(cmd, cmd->t_task_lba, sectors,
@@ -608,7 +608,7 @@  fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 	} else {
 		memset(&fd_prot, 0, sizeof(struct fd_prot));
 
-		if (cmd->prot_type) {
+		if (cmd->prot_type && dev->dev_attrib.pi_prot_type) {
 			u32 sectors = cmd->data_length / dev->dev_attrib.block_size;
 
 			ret = fd_do_prot_rw(cmd, &fd_prot, false);
@@ -646,7 +646,7 @@  fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 			vfs_fsync_range(fd_dev->fd_file, start, end, 1);
 		}
 
-		if (ret > 0 && cmd->prot_type) {
+		if (ret > 0 && cmd->prot_type && dev->dev_attrib.pi_prot_type) {
 			ret = fd_do_prot_rw(cmd, &fd_prot, true);
 			if (ret < 0)
 				return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;