Skip to content

Commit 40cd98e

Browse files
Roman Bolshakovgregkh
authored andcommitted
scsi: target: core: Add CONTROL field for trace events
[ Upstream commit 7010645 ] trace-cmd report doesn't show events from target subsystem because scsi_command_size() leaks through event format string: [target:target_sequencer_start] function scsi_command_size not defined [target:target_cmd_complete] function scsi_command_size not defined Addition of scsi_command_size() to plugin_scsi.c in trace-cmd doesn't help because an expression is used inside TP_printk(). trace-cmd event parser doesn't understand minus sign inside [ ]: Error: expected ']' but read '-' Rather than duplicating kernel code in plugin_scsi.c, provide a dedicated field for CONTROL byte. Link: https://lore.kernel.org/r/20200929125957.83069-1-r.bolshakov@yadro.com Reviewed-by: Mike Christie <michael.christie@oracle.com> Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent eed3b45 commit 40cd98e

2 files changed

Lines changed: 13 additions & 6 deletions

File tree

include/scsi/scsi_common.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ scsi_command_size(const unsigned char *cmnd)
2525
scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]);
2626
}
2727

28+
static inline unsigned char
29+
scsi_command_control(const unsigned char *cmnd)
30+
{
31+
return (cmnd[0] == VARIABLE_LENGTH_CMD) ?
32+
cmnd[1] : cmnd[COMMAND_SIZE(cmnd[0]) - 1];
33+
}
34+
2835
/* Returns a human-readable name for the device */
2936
extern const char *scsi_device_type(unsigned type);
3037

include/trace/events/target.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ TRACE_EVENT(target_sequencer_start,
141141
__field( unsigned int, opcode )
142142
__field( unsigned int, data_length )
143143
__field( unsigned int, task_attribute )
144+
__field( unsigned char, control )
144145
__array( unsigned char, cdb, TCM_MAX_COMMAND_SIZE )
145146
__string( initiator, cmd->se_sess->se_node_acl->initiatorname )
146147
),
@@ -151,6 +152,7 @@ TRACE_EVENT(target_sequencer_start,
151152
__entry->opcode = cmd->t_task_cdb[0];
152153
__entry->data_length = cmd->data_length;
153154
__entry->task_attribute = cmd->sam_task_attr;
155+
__entry->control = scsi_command_control(cmd->t_task_cdb);
154156
memcpy(__entry->cdb, cmd->t_task_cdb, TCM_MAX_COMMAND_SIZE);
155157
__assign_str(initiator, cmd->se_sess->se_node_acl->initiatorname);
156158
),
@@ -160,9 +162,7 @@ TRACE_EVENT(target_sequencer_start,
160162
__entry->tag, show_opcode_name(__entry->opcode),
161163
__entry->data_length, __print_hex(__entry->cdb, 16),
162164
show_task_attribute_name(__entry->task_attribute),
163-
scsi_command_size(__entry->cdb) <= 16 ?
164-
__entry->cdb[scsi_command_size(__entry->cdb) - 1] :
165-
__entry->cdb[1]
165+
__entry->control
166166
)
167167
);
168168

@@ -178,6 +178,7 @@ TRACE_EVENT(target_cmd_complete,
178178
__field( unsigned int, opcode )
179179
__field( unsigned int, data_length )
180180
__field( unsigned int, task_attribute )
181+
__field( unsigned char, control )
181182
__field( unsigned char, scsi_status )
182183
__field( unsigned char, sense_length )
183184
__array( unsigned char, cdb, TCM_MAX_COMMAND_SIZE )
@@ -191,6 +192,7 @@ TRACE_EVENT(target_cmd_complete,
191192
__entry->opcode = cmd->t_task_cdb[0];
192193
__entry->data_length = cmd->data_length;
193194
__entry->task_attribute = cmd->sam_task_attr;
195+
__entry->control = scsi_command_control(cmd->t_task_cdb);
194196
__entry->scsi_status = cmd->scsi_status;
195197
__entry->sense_length = cmd->scsi_status == SAM_STAT_CHECK_CONDITION ?
196198
min(18, ((u8 *) cmd->sense_buffer)[SPC_ADD_SENSE_LEN_OFFSET] + 8) : 0;
@@ -208,9 +210,7 @@ TRACE_EVENT(target_cmd_complete,
208210
show_opcode_name(__entry->opcode),
209211
__entry->data_length, __print_hex(__entry->cdb, 16),
210212
show_task_attribute_name(__entry->task_attribute),
211-
scsi_command_size(__entry->cdb) <= 16 ?
212-
__entry->cdb[scsi_command_size(__entry->cdb) - 1] :
213-
__entry->cdb[1]
213+
__entry->control
214214
)
215215
);
216216

0 commit comments

Comments
 (0)