Commit aa58b531 authored by Nicholas Bellinger's avatar Nicholas Bellinger

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: default avatarMartin Petersen <martin.petersen@oracle.com>
Reviewed-by: default avatarSagi Grimberg <sagig@mellanox.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 9ef5466e
...@@ -1738,6 +1738,25 @@ void __target_execute_cmd(struct se_cmd *cmd) ...@@ -1738,6 +1738,25 @@ void __target_execute_cmd(struct se_cmd *cmd)
} }
} }
static int target_write_prot_action(struct se_cmd *cmd)
{
/*
* Perform WRITE_INSERT of PI using software emulation when backend
* device has PI enabled, if the transport has not already generated
* PI using hardware WRITE_INSERT offload.
*/
switch (cmd->prot_op) {
case TARGET_PROT_DOUT_INSERT:
if (!(cmd->se_sess->sup_prot_ops & TARGET_PROT_DOUT_INSERT))
sbc_dif_generate(cmd);
break;
default:
break;
}
return 0;
}
static bool target_handle_task_attr(struct se_cmd *cmd) static bool target_handle_task_attr(struct se_cmd *cmd)
{ {
struct se_device *dev = cmd->se_dev; struct se_device *dev = cmd->se_dev;
...@@ -1817,15 +1836,9 @@ void target_execute_cmd(struct se_cmd *cmd) ...@@ -1817,15 +1836,9 @@ void target_execute_cmd(struct se_cmd *cmd)
cmd->t_state = TRANSPORT_PROCESSING; cmd->t_state = TRANSPORT_PROCESSING;
cmd->transport_state |= CMD_T_ACTIVE|CMD_T_BUSY|CMD_T_SENT; cmd->transport_state |= CMD_T_ACTIVE|CMD_T_BUSY|CMD_T_SENT;
spin_unlock_irq(&cmd->t_state_lock); spin_unlock_irq(&cmd->t_state_lock);
/*
* Perform WRITE_INSERT of PI using software emulation when backend if (target_write_prot_action(cmd))
* device has PI enabled, if the transport has not already generated return;
* PI using hardware WRITE_INSERT offload.
*/
if (cmd->prot_op == TARGET_PROT_DOUT_INSERT) {
if (!(cmd->se_sess->sup_prot_ops & TARGET_PROT_DOUT_INSERT))
sbc_dif_generate(cmd);
}
if (target_handle_task_attr(cmd)) { if (target_handle_task_attr(cmd)) {
spin_lock_irq(&cmd->t_state_lock); spin_lock_irq(&cmd->t_state_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment