diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-02-28 05:44:19 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-04-08 02:27:44 -0400 |
commit | ee920469d61e896d124fec528250ecfba1ec9f8d (patch) | |
tree | d5227fabd4484130b94e75a8f1f819fec6a18c6a /drivers/target | |
parent | 72c0385014a140b6029c5c8bf88efb9ad166ae48 (diff) |
target/file: Add checks for backend DIF emulation
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>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/target_core_file.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c index cd9393545b7a..fa54835f398b 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, | |||
584 | if (data_direction == DMA_FROM_DEVICE) { | 584 | if (data_direction == DMA_FROM_DEVICE) { |
585 | memset(&fd_prot, 0, sizeof(struct fd_prot)); | 585 | memset(&fd_prot, 0, sizeof(struct fd_prot)); |
586 | 586 | ||
587 | if (cmd->prot_type) { | 587 | if (cmd->prot_type && dev->dev_attrib.pi_prot_type) { |
588 | ret = fd_do_prot_rw(cmd, &fd_prot, false); | 588 | ret = fd_do_prot_rw(cmd, &fd_prot, false); |
589 | if (ret < 0) | 589 | if (ret < 0) |
590 | return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; | 590 | return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; |
@@ -592,7 +592,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents, | |||
592 | 592 | ||
593 | ret = fd_do_rw(cmd, sgl, sgl_nents, 0); | 593 | ret = fd_do_rw(cmd, sgl, sgl_nents, 0); |
594 | 594 | ||
595 | if (ret > 0 && cmd->prot_type) { | 595 | if (ret > 0 && cmd->prot_type && dev->dev_attrib.pi_prot_type) { |
596 | u32 sectors = cmd->data_length / dev->dev_attrib.block_size; | 596 | u32 sectors = cmd->data_length / dev->dev_attrib.block_size; |
597 | 597 | ||
598 | rc = sbc_dif_verify_read(cmd, cmd->t_task_lba, sectors, | 598 | 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, | |||
608 | } else { | 608 | } else { |
609 | memset(&fd_prot, 0, sizeof(struct fd_prot)); | 609 | memset(&fd_prot, 0, sizeof(struct fd_prot)); |
610 | 610 | ||
611 | if (cmd->prot_type) { | 611 | if (cmd->prot_type && dev->dev_attrib.pi_prot_type) { |
612 | u32 sectors = cmd->data_length / dev->dev_attrib.block_size; | 612 | u32 sectors = cmd->data_length / dev->dev_attrib.block_size; |
613 | 613 | ||
614 | ret = fd_do_prot_rw(cmd, &fd_prot, false); | 614 | 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, | |||
646 | vfs_fsync_range(fd_dev->fd_file, start, end, 1); | 646 | vfs_fsync_range(fd_dev->fd_file, start, end, 1); |
647 | } | 647 | } |
648 | 648 | ||
649 | if (ret > 0 && cmd->prot_type) { | 649 | if (ret > 0 && cmd->prot_type && dev->dev_attrib.pi_prot_type) { |
650 | ret = fd_do_prot_rw(cmd, &fd_prot, true); | 650 | ret = fd_do_prot_rw(cmd, &fd_prot, true); |
651 | if (ret < 0) | 651 | if (ret < 0) |
652 | return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; | 652 | return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; |