diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-02-08 15:39:06 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-04-08 02:26:25 -0400 |
commit | aa58b53168e12342aa0561c12bf5d6729487c63e (patch) | |
tree | 6f151ca0067ba6eae5f1c93d984201b655369af6 /drivers/target | |
parent | 9ef5466ee2f0599caf8d84203d36e581c6fc7035 (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.c | 31 |
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 | ||
1741 | static 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 | |||
1741 | static bool target_handle_task_attr(struct se_cmd *cmd) | 1760 | static 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); |