From 5d9ad0923a7c7d2d300de315430e12cfd84a44d2 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 26 Jun 2018 15:38:12 -0700 Subject: [PATCH] scoutfs: trace net structs 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/scoutfs_trace.h | 39 +++++++++++------------------------- kmod/src/server.h | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 27 deletions(-) diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index e43084d0..fd3a0f6c 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -37,6 +37,7 @@ #include "export.h" #include "dir.h" #include "extents.h" +#include "server.h" struct lock_info; @@ -1641,36 +1642,20 @@ DECLARE_EVENT_CLASS(scoutfs_net_class, struct sockaddr_in *peer, struct scoutfs_net_header *nh), TP_ARGS(sb, name, peer, nh), TP_STRUCT__entry( - __field(unsigned int, major) - __field(unsigned int, minor) - __field(u32, name_addr) - __field(u16, name_port) - __field(u32, peer_addr) - __field(u16, peer_port) - __field(u64, id) - __field(u8, type) - __field(u8, status) - __field(u16, data_len) + __field(__u64, fsid) + si4_trace_define(name) + si4_trace_define(peer) + snh_trace_define(nh) ), TP_fast_assign( - __entry->major = MAJOR(sb->s_bdev->bd_dev); - __entry->minor = MINOR(sb->s_bdev->bd_dev); - /* sparse can't handle this cpp nightmare */ - __entry->name_addr = (u32 __force)name->sin_addr.s_addr; - __entry->name_port = be16_to_cpu(name->sin_port); - __entry->peer_addr = (u32 __force)peer->sin_addr.s_addr; - __entry->peer_port = be16_to_cpu(peer->sin_port); - __entry->id = le64_to_cpu(nh->id); - __entry->type = nh->type; - __entry->status = nh->status; - __entry->data_len = le16_to_cpu(nh->data_len); + __entry->fsid = FSID_ARG(sb); + si4_trace_assign(name, name); + si4_trace_assign(peer, peer); + snh_trace_assign(nh, nh); ), - TP_printk("dev %u:%u %pI4:%u -> %pI4:%u id %llu type %u status %u data_len %u", - __entry->major, __entry->minor, - &__entry->name_addr, __entry->name_port, - &__entry->peer_addr, __entry->peer_port, - __entry->id, __entry->type, __entry->status, - __entry->data_len) + TP_printk("fsid "FSID_FMT" name "SI4_FMT" peer "SI4_FMT" nh "SNH_FMT, + __entry->fsid, si4_trace_args(name), si4_trace_args(peer), + snh_trace_args(nh)) ); DEFINE_EVENT(scoutfs_net_class, scoutfs_client_send_request, diff --git a/kmod/src/server.h b/kmod/src/server.h index bbc73901..96f3a5df 100644 --- a/kmod/src/server.h +++ b/kmod/src/server.h @@ -1,6 +1,49 @@ #ifndef _SCOUTFS_SERVER_H_ #define _SCOUTFS_SERVER_H_ +#define SI4_FMT "%u.%u.%u.%u:%u" + +#define si4_trace_define(name) \ + __field(__u32, name##_addr) \ + __field(__u16, name##_port) + +#define si4_trace_assign(name, sin) \ +do { \ + __typeof__(sin) _sin = (sin); \ + \ + __entry->name##_addr = be32_to_cpu(_sin->sin_addr.s_addr); \ + __entry->name##_port = be16_to_cpu(_sin->sin_port); \ +} while(0) + +#define si4_trace_args(name) \ + (__entry->name##_addr >> 24), \ + (__entry->name##_addr >> 16) & 255, \ + (__entry->name##_addr >> 0) & 255, \ + __entry->name##_addr & 255, \ + __entry->name##_port + +#define SNH_FMT "id %llu data_len %u type %u status %u" + +#define snh_trace_define(name) \ + __field(__u64, name##_id) \ + __field(__u16, name##_data_len) \ + __field(__u8, name##_type) \ + __field(__u8, name##_status) + +#define snh_trace_assign(name, nh) \ +do { \ + __typeof__(nh) _nh = (nh); \ + \ + __entry->name##_id = le64_to_cpu(_nh->id); \ + __entry->name##_data_len = le16_to_cpu(_nh->data_len); \ + __entry->name##_type = _nh->type; \ + __entry->name##_status = _nh->status; \ +} while (0) + +#define snh_trace_args(name) \ + __entry->name##_id, __entry->name##_data_len, __entry->name##_type, \ + __entry->name##_status + void scoutfs_init_ment_to_net(struct scoutfs_net_manifest_entry *net_ment, struct scoutfs_manifest_entry *ment); void scoutfs_init_ment_from_net(struct scoutfs_manifest_entry *ment,