Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SCSI] Include protection operation in SCSI command trace

When debugging DIF/DIX it is very helpful to be able to see which DIX
operation is associated with the scsi_cmnd. Include the protection op in
the SCSI command trace.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>

authored by

Martin K. Petersen and committed by
James Bottomley
72f7d322 9143a961

+25 -4
+1
drivers/scsi/scsi_lib.c
··· 1062 1062 cmd->request = req; 1063 1063 1064 1064 cmd->cmnd = req->cmd; 1065 + cmd->prot_op = SCSI_PROT_NORMAL; 1065 1066 1066 1067 return cmd; 1067 1068 }
+24 -4
include/trace/events/scsi.h
··· 184 184 scsi_statusbyte_name(SAM_STAT_ACA_ACTIVE), \ 185 185 scsi_statusbyte_name(SAM_STAT_TASK_ABORTED)) 186 186 187 + #define scsi_prot_op_name(result) { result, #result } 188 + #define show_prot_op_name(val) \ 189 + __print_symbolic(val, \ 190 + scsi_prot_op_name(SCSI_PROT_NORMAL), \ 191 + scsi_prot_op_name(SCSI_PROT_READ_INSERT), \ 192 + scsi_prot_op_name(SCSI_PROT_WRITE_STRIP), \ 193 + scsi_prot_op_name(SCSI_PROT_READ_STRIP), \ 194 + scsi_prot_op_name(SCSI_PROT_WRITE_INSERT), \ 195 + scsi_prot_op_name(SCSI_PROT_READ_PASS), \ 196 + scsi_prot_op_name(SCSI_PROT_WRITE_PASS)) 197 + 187 198 const char *scsi_trace_parse_cdb(struct trace_seq*, unsigned char*, int); 188 199 #define __parse_cdb(cdb, len) scsi_trace_parse_cdb(p, cdb, len) 189 200 ··· 213 202 __field( unsigned int, cmd_len ) 214 203 __field( unsigned int, data_sglen ) 215 204 __field( unsigned int, prot_sglen ) 205 + __field( unsigned char, prot_op ) 216 206 __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 217 207 ), 218 208 ··· 226 214 __entry->cmd_len = cmd->cmd_len; 227 215 __entry->data_sglen = scsi_sg_count(cmd); 228 216 __entry->prot_sglen = scsi_prot_sg_count(cmd); 217 + __entry->prot_op = scsi_get_prot_op(cmd); 229 218 memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 230 219 ), 231 220 232 221 TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \ 233 - " cmnd=(%s %s raw=%s)", 222 + " prot_op=%s cmnd=(%s %s raw=%s)", 234 223 __entry->host_no, __entry->channel, __entry->id, 235 224 __entry->lun, __entry->data_sglen, __entry->prot_sglen, 225 + show_prot_op_name(__entry->prot_op), 236 226 show_opcode_name(__entry->opcode), 237 227 __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 238 228 __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len)) ··· 256 242 __field( unsigned int, cmd_len ) 257 243 __field( unsigned int, data_sglen ) 258 244 __field( unsigned int, prot_sglen ) 245 + __field( unsigned char, prot_op ) 259 246 __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 260 247 ), 261 248 ··· 270 255 __entry->cmd_len = cmd->cmd_len; 271 256 __entry->data_sglen = scsi_sg_count(cmd); 272 257 __entry->prot_sglen = scsi_prot_sg_count(cmd); 258 + __entry->prot_op = scsi_get_prot_op(cmd); 273 259 memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 274 260 ), 275 261 276 262 TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \ 277 - " cmnd=(%s %s raw=%s) rtn=%d", 263 + " prot_op=%s cmnd=(%s %s raw=%s) rtn=%d", 278 264 __entry->host_no, __entry->channel, __entry->id, 279 265 __entry->lun, __entry->data_sglen, __entry->prot_sglen, 266 + show_prot_op_name(__entry->prot_op), 280 267 show_opcode_name(__entry->opcode), 281 268 __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 282 269 __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len), ··· 301 284 __field( unsigned int, cmd_len ) 302 285 __field( unsigned int, data_sglen ) 303 286 __field( unsigned int, prot_sglen ) 287 + __field( unsigned char, prot_op ) 304 288 __dynamic_array(unsigned char, cmnd, cmd->cmd_len) 305 289 ), 306 290 ··· 315 297 __entry->cmd_len = cmd->cmd_len; 316 298 __entry->data_sglen = scsi_sg_count(cmd); 317 299 __entry->prot_sglen = scsi_prot_sg_count(cmd); 300 + __entry->prot_op = scsi_get_prot_op(cmd); 318 301 memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); 319 302 ), 320 303 321 304 TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u " \ 322 - "prot_sgl=%u cmnd=(%s %s raw=%s) result=(driver=%s host=%s " \ 323 - "message=%s status=%s)", 305 + "prot_sgl=%u prot_op=%s cmnd=(%s %s raw=%s) result=(driver=" \ 306 + "%s host=%s message=%s status=%s)", 324 307 __entry->host_no, __entry->channel, __entry->id, 325 308 __entry->lun, __entry->data_sglen, __entry->prot_sglen, 309 + show_prot_op_name(__entry->prot_op), 326 310 show_opcode_name(__entry->opcode), 327 311 __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len), 328 312 __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len),