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 <zab@versity.com>
This commit is contained in:
Zach Brown
2018-06-26 15:38:12 -07:00
committed by Zach Brown
parent 53e8ab0f7b
commit 5d9ad0923a
2 changed files with 55 additions and 27 deletions

View File

@@ -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,

View File

@@ -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,