Thread (4 messages) 4 messages, 3 authors, 2020-05-06

Re: [PATCH RFC 2/2] tracing/block: add request operation and flags into trace events

From: Steven Rostedt <rostedt@goodmis.org>
Date: 2020-05-04 17:35:29
Also in: linux-bcache, lkml

On Mon, 04 May 2020 18:16:21 +0300
Konstantin Khlebnikov [off-list ref] wrote:
+/* Request operations, see enum req_opf */
+
+TRACE_DEFINE_ENUM(REQ_OP_READ);
+TRACE_DEFINE_ENUM(REQ_OP_WRITE);
+TRACE_DEFINE_ENUM(REQ_OP_FLUSH);
+TRACE_DEFINE_ENUM(REQ_OP_DISCARD);
+TRACE_DEFINE_ENUM(REQ_OP_SECURE_ERASE);
+TRACE_DEFINE_ENUM(REQ_OP_ZONE_RESET);
+TRACE_DEFINE_ENUM(REQ_OP_WRITE_SAME);
+TRACE_DEFINE_ENUM(REQ_OP_ZONE_RESET_ALL);
+TRACE_DEFINE_ENUM(REQ_OP_WRITE_ZEROES);
+TRACE_DEFINE_ENUM(REQ_OP_ZONE_OPEN);
+TRACE_DEFINE_ENUM(REQ_OP_ZONE_CLOSE);
+TRACE_DEFINE_ENUM(REQ_OP_ZONE_FINISH);
+TRACE_DEFINE_ENUM(REQ_OP_SCSI_IN);
+TRACE_DEFINE_ENUM(REQ_OP_SCSI_OUT);
+TRACE_DEFINE_ENUM(REQ_OP_DRV_IN);
+TRACE_DEFINE_ENUM(REQ_OP_DRV_OUT);
+
+#define BLOCK_REQ_OP_STRINGS					\
+	{ REQ_OP_READ,		"READ" },			\
+	{ REQ_OP_WRITE,		"WRITE" },			\
+	{ REQ_OP_FLUSH,		"FLUSH" },			\
+	{ REQ_OP_DISCARD,	"DISCARD" },			\
+	{ REQ_OP_SECURE_ERASE,	"SECURE_ERASE" },		\
+	{ REQ_OP_ZONE_RESET,	"ZONE_RESET" },			\
+	{ REQ_OP_WRITE_SAME,	"WRITE_SAME" },			\
+	{ REQ_OP_ZONE_RESET_ALL,"ZONE_RESET_ALL" },		\
+	{ REQ_OP_WRITE_ZEROES,	"WRITE_ZEROES" },		\
+	{ REQ_OP_ZONE_OPEN,	"ZONE_OPEN" },			\
+	{ REQ_OP_ZONE_CLOSE,	"ZONE_CLOSE" },			\
+	{ REQ_OP_ZONE_FINISH,	"ZONE_FINISH" },		\
+	{ REQ_OP_SCSI_IN,	"SCSI_IN" },			\
+	{ REQ_OP_SCSI_OUT,	"SCSI_OUT" },			\
+	{ REQ_OP_DRV_IN,	"DRV_IN" },			\
+	{ REQ_OP_DRV_OUT,	"DRV_OUT" }
+
+#define show_block_req_op(req)					\
+	__print_symbolic((req) & REQ_OP_MASK, BLOCK_REQ_OP_STRINGS)
+
A common trick to avoid the duplication from above is to do this:

#define BLOCK_REQ_OP_STRINGS					\
	EM( REQ_OP_READ,	"READ" )			\
	EM( REQ_OP_WRITE,	"WRITE" )			\
	EM( REQ_OP_FLUSH,	"FLUSH" )			\
	EM( REQ_OP_DISCARD,	"DISCARD" )			\
	EM( REQ_OP_SECURE_ERASE, "SECURE_ERASE" )		\
	EM( REQ_OP_ZONE_RESET,	"ZONE_RESET" )			\
	EM( REQ_OP_WRITE_SAME,	"WRITE_SAME" )			\
	EM( REQ_OP_ZONE_RESET_ALL,"ZONE_RESET_ALL" )		\
	EM( REQ_OP_WRITE_ZEROES, "WRITE_ZEROES" )		\
	EM( REQ_OP_ZONE_OPEN,	"ZONE_OPEN" )			\
	EM( REQ_OP_ZONE_CLOSE,	"ZONE_CLOSE" )			\
	EM( REQ_OP_ZONE_FINISH,	"ZONE_FINISH" )			\
	EM( REQ_OP_SCSI_IN,	"SCSI_IN" )			\
	EM( REQ_OP_SCSI_OUT,	"SCSI_OUT" )			\
	EM( REQ_OP_DRV_IN,	"DRV_IN" )			\
	EMe( REQ_OP_DRV_OUT,	"DRV_OUT" )

#undef EM
#undef EMe

#define EM(a, b) TRACE_DEFINE_ENUM(a);
#define EMe(a, b) TRACE_DEFINE_ENUM(a);

BLOCK_REQ_OP_STRINGS

#undef EM
#undef EMe

#define EM(a, b) { a, b },
#define EMe(a, b)  { a , b }

#define show_block_req_op(req)
	__print_symbolic((req) & REQ_OP_MASK, BLOCK_REQ_OP_STRINGS)


Several other event files in include/trace/events do this.

-- Steve
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help