target: replace se_cmd->execute_rw with a protocol_data field
[firefly-linux-kernel-4.4.55.git] / drivers / target / target_core_sbc.c
index 31b2ae356120d1a1f1fd3ffd0e1dec8e7e5b1652..287843e19275fd181be4ece193df1044d87ec02f 100644 (file)
@@ -381,7 +381,9 @@ out:
 static sense_reason_t
 sbc_execute_rw(struct se_cmd *cmd)
 {
-       return cmd->execute_rw(cmd, cmd->t_data_sg, cmd->t_data_nents,
+       struct sbc_ops *ops = cmd->protocol_data;
+
+       return ops->execute_rw(cmd, cmd->t_data_sg, cmd->t_data_nents,
                               cmd->data_direction);
 }
 
@@ -560,6 +562,7 @@ out:
 static sense_reason_t
 sbc_compare_and_write(struct se_cmd *cmd)
 {
+       struct sbc_ops *ops = cmd->protocol_data;
        struct se_device *dev = cmd->se_dev;
        sense_reason_t ret;
        int rc;
@@ -579,7 +582,7 @@ sbc_compare_and_write(struct se_cmd *cmd)
         */
        cmd->data_length = cmd->t_task_nolb * dev->dev_attrib.block_size;
 
-       ret = cmd->execute_rw(cmd, cmd->t_bidi_data_sg, cmd->t_bidi_data_nents,
+       ret = ops->execute_rw(cmd, cmd->t_bidi_data_sg, cmd->t_bidi_data_nents,
                              DMA_FROM_DEVICE);
        if (ret) {
                cmd->transport_complete_callback = NULL;
@@ -766,12 +769,13 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
        u32 sectors = 0;
        sense_reason_t ret;
 
+       cmd->protocol_data = ops;
+
        switch (cdb[0]) {
        case READ_6:
                sectors = transport_get_sectors_6(cdb);
                cmd->t_task_lba = transport_lba_21(cdb);
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case READ_10:
@@ -786,7 +790,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                        return ret;
 
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case READ_12:
@@ -801,7 +804,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                        return ret;
 
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case READ_16:
@@ -816,14 +818,12 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                        return ret;
 
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case WRITE_6:
                sectors = transport_get_sectors_6(cdb);
                cmd->t_task_lba = transport_lba_21(cdb);
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case WRITE_10:
@@ -839,7 +839,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                        return ret;
 
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case WRITE_12:
@@ -854,7 +853,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                        return ret;
 
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case WRITE_16:
@@ -869,7 +867,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                        return ret;
 
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                break;
        case XDWRITEREAD_10:
@@ -887,7 +884,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                /*
                 * Setup BIDI XOR callback to be run after I/O completion.
                 */
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_execute_rw;
                cmd->transport_complete_callback = &xdreadwrite_callback;
                break;
@@ -911,7 +907,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                         * Setup BIDI XOR callback to be run during after I/O
                         * completion.
                         */
-                       cmd->execute_rw = ops->execute_rw;
                        cmd->execute_cmd = sbc_execute_rw;
                        cmd->transport_complete_callback = &xdreadwrite_callback;
                        break;
@@ -955,7 +950,6 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
                cmd->t_task_lba = get_unaligned_be64(&cdb[2]);
                cmd->t_task_nolb = sectors;
                cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB | SCF_COMPARE_AND_WRITE;
-               cmd->execute_rw = ops->execute_rw;
                cmd->execute_cmd = sbc_compare_and_write;
                cmd->transport_complete_callback = compare_and_write_callback;
                break;