From 53e8ab0f7b68f44886671fd79685fb537ef18b13 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 26 Jun 2018 15:04:21 -0700 Subject: [PATCH] scoutfs: trace extent struct The userspace trace event printing code has trouble with arguments that refer to fields in entries. Add macros to make entries for all the fields and use them as the formatted arguments. Signed-off-by: Zach Brown --- kmod/src/extents.h | 25 +++++++++++++++++++++++++ kmod/src/scoutfs_trace.h | 18 +++++++++--------- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/kmod/src/extents.h b/kmod/src/extents.h index 2cba23ab..478892a8 100644 --- a/kmod/src/extents.h +++ b/kmod/src/extents.h @@ -18,6 +18,31 @@ struct scoutfs_extent { #define SE_ARG(ext) (ext)->owner, (ext)->start, (ext)->len, (ext)->map, \ (ext)->type, (ext)->flags +#define se_trace_define(name) \ + __field(__u64, name##_owner) \ + __field(__u64, name##_start) \ + __field(__u64, name##_len) \ + __field(__u64, name##_map) \ + __field(__u8, name##_type) \ + __field(__u8, name##_flags) + +/* doesn't support null extent pointers */ +#define se_trace_assign(name, ext) \ +do { \ + __typeof__(ext) _ext = (ext); \ + \ + __entry->name##_owner = _ext->owner; \ + __entry->name##_start = _ext->start; \ + __entry->name##_len = _ext->len; \ + __entry->name##_map = _ext->map; \ + __entry->name##_type = _ext->type; \ + __entry->name##_flags = _ext->flags; \ +} while (0) + +#define se_trace_args(name) \ + __entry->name##_owner, __entry->name##_start, __entry->name##_len, \ + __entry->name##_map, __entry->name##_type, __entry->name##_flags + enum { SEI_NEXT, SEI_PREV, diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index dc7568b0..e43084d0 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -446,7 +446,7 @@ TRACE_EVENT(scoutfs_data_alloc_block, TP_STRUCT__entry( __field(__u64, fsid) __field(__u64, ino) - __field_struct(struct scoutfs_extent, ext) + se_trace_define(ext) __field(__u64, iblock) __field(__u64, len) __field(__u64, online_blocks) @@ -456,7 +456,7 @@ TRACE_EVENT(scoutfs_data_alloc_block, TP_fast_assign( __entry->fsid = FSID_ARG(sb); __entry->ino = scoutfs_ino(inode); - __entry->ext = *ext; + se_trace_assign(ext, ext); __entry->iblock = iblock; __entry->len = len; __entry->online_blocks = online_blocks; @@ -464,7 +464,7 @@ TRACE_EVENT(scoutfs_data_alloc_block, ), TP_printk("fsid "FSID_FMT" ino %llu ext "SE_FMT" iblock %llu len %llu online_blocks %llu offline_blocks %llu", - __entry->fsid, __entry->ino, SE_ARG(&__entry->ext), + __entry->fsid, __entry->ino, se_trace_args(ext), __entry->iblock, __entry->len, __entry->online_blocks, __entry->offline_blocks) ); @@ -476,18 +476,18 @@ TRACE_EVENT(scoutfs_data_alloc_block_ret, TP_STRUCT__entry( __field(__u64, fsid) - __field_struct(struct scoutfs_extent, ext) + se_trace_define(ext) __field(int, ret) ), TP_fast_assign( __entry->fsid = FSID_ARG(sb); - __entry->ext = *ext; + se_trace_assign(ext, ext); __entry->ret = ret; ), TP_printk(FSID_FMT" ext "SE_FMT" ret %d", __entry->fsid, - SE_ARG(&__entry->ext), __entry->ret) + se_trace_args(ext), __entry->ret) ); TRACE_EVENT(scoutfs_data_truncate_items, @@ -2083,16 +2083,16 @@ DECLARE_EVENT_CLASS(scoutfs_extent_class, TP_STRUCT__entry( __field(__u64, fsid) - __field_struct(struct scoutfs_extent, ext) + se_trace_define(ext) ), TP_fast_assign( __entry->fsid = SCOUTFS_SB(sb) ? FSID_ARG(sb) : 0; - __entry->ext = *ext; + se_trace_assign(ext, ext); ), TP_printk("fsid "FSID_FMT" ext "SE_FMT, - __entry->fsid, SE_ARG(&__entry->ext)) + __entry->fsid, se_trace_args(ext)) ); DEFINE_EVENT(scoutfs_extent_class, scoutfs_extent_insert,