1
linux/include/trace
Li Zefan 7fcb7c472f tracing/events: introduce __dynamic_array()
__string() is limited:

  - it's a char array, but we may want to define array with other types
  - a source string should be available, but we may just know the string size

We introduce __dynamic_array() to break those limitations, and __string()
becomes a wrapper of it. As a side effect, now __get_str() can be used
in TP_fast_assign but not only TP_print.

Take XFS for example, we have the string length in the dirent, but the
string itself is not NULL-terminated, so __dynamic_array() can be used:

TRACE_EVENT(xfs_dir2,
	TP_PROTO(struct xfs_da_args *args),
	TP_ARGS(args),

	TP_STRUCT__entry(
		__field(int, namelen)
		__dynamic_array(char, name, args->namelen + 1)
		...
	),

	TP_fast_assign(
		char *name = __get_str(name);

		if (args->namelen)
			memcpy(name, args->name, args->namelen);
		name[args->namelen] = '\0';

		__entry->namelen = args->namelen;
	),

	TP_printk("name %.*s namelen %d",
		  __entry->namelen ? __get_str(name) : NULL
		  __entry->namelen)
);

[ Impact: allow defining dynamic size arrays ]

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A2384D2.3080403@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2009-06-01 23:25:15 -04:00
..
events tracing: convert irq events to use __print_symbolic 2009-05-26 20:32:30 +02:00
block.h blktrace: from-sector redundant in trace_block_remap, cleanup 2009-05-11 13:30:24 +02:00
boot.h tracing/fastboot: include missing headers 2008-12-12 09:26:13 +01:00
define_trace.h tracing: remove deprecated TRACE_FORMAT 2009-04-24 11:50:39 -04:00
ftrace.h tracing/events: introduce __dynamic_array() 2009-06-01 23:25:15 -04:00
power.h tracing: replace TP<var> with TP_<var> 2009-03-10 00:35:04 -04:00
syscall.h tracing/syscalls: use a dedicated file header 2009-04-09 05:43:32 +02:00
workqueue.h tracing: replace TP<var> with TP_<var> 2009-03-10 00:35:04 -04:00