aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorNicholas Bellinger <nab@linux-iscsi.org>2015-02-08 15:39:06 -0500
committerNicholas Bellinger <nab@linux-iscsi.org>2015-04-08 02:26:25 -0400
commitaa58b53168e12342aa0561c12bf5d6729487c63e (patch)
tree6f151ca0067ba6eae5f1c93d984201b655369af6 /drivers/target
parent9ef5466ee2f0599caf8d84203d36e581c6fc7035 (diff)
target: Move cmd->prot_op check into target_write_prot_action
This patch moves the existing target_execute_cmd() check for cmd->prot_op into it's own function, so it's easier to add future support for WRITE STRIP. (Use better target_write_prot_action name - Sagi) Reviewed-by: Martin Petersen <martin.petersen@oracle.com> Reviewed-by: 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_transport.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index aef989e165ed..2a0c36bf3226 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -1738,6 +1738,25 @@ void __target_execute_cmd(struct se_cmd *cmd)
1738 } 1738 }
1739} 1739}
1740 1740
1741static int target_write_prot_action(struct se_cmd *cmd)
1742{
1743 /*
1744 * Perform WRITE_INSERT of PI using software emulation when backend
1745 * device has PI enabled, if the transport has not already generated
1746 * PI using hardware WRITE_INSERT offload.
1747 */
1748 switch (cmd->prot_op) {
1749 case TARGET_PROT_DOUT_INSERT:
1750 if (!(cmd->se_sess->sup_prot_ops & TARGET_PROT_DOUT_INSERT))
1751 sbc_dif_generate(cmd);
1752 break;
1753 default:
1754 break;
1755 }
1756
1757 return 0;
1758}
1759
1741static bool target_handle_task_attr(struct se_cmd *cmd) 1760static bool target_handle_task_attr(struct se_cmd *cmd)
1742{ 1761{
1743 struct se_device *dev = cmd->se_dev; 1762 struct se_device *dev = cmd->se_dev;
@@ -1817,15 +1836,9 @@ void target_execute_cmd(struct se_cmd *cmd)
1817 cmd->t_state = TRANSPORT_PROCESSING; 1836 cmd->t_state = TRANSPORT_PROCESSING;
1818 cmd->transport_state |= CMD_T_ACTIVE|CMD_T_BUSY|CMD_T_SENT; 1837 cmd->transport_state |= CMD_T_ACTIVE|CMD_T_BUSY|CMD_T_SENT;
1819 spin_unlock_irq(&cmd->t_state_lock); 1838 spin_unlock_irq(&cmd->t_state_lock);
1820 /* 1839
1821 * Perform WRITE_INSERT of PI using software emulation when backend 1840 if (target_write_prot_action(cmd))
1822 * device has PI enabled, if the transport has not already generated 1841 return;
1823 * PI using hardware WRITE_INSERT offload.
1824 */
1825 if (cmd->prot_op == TARGET_PROT_DOUT_INSERT) {
1826 if (!(cmd->se_sess->sup_prot_ops & TARGET_PROT_DOUT_INSERT))
1827 sbc_dif_generate(cmd);
1828 }
1829 1842
1830 if (target_handle_task_attr(cmd)) { 1843 if (target_handle_task_attr(cmd)) {
1831 spin_lock_irq(&cmd->t_state_lock); 1844 spin_lock_irq(&cmd->t_state_lock);