mirror of
https://github.com/versity/scoutfs.git
synced 2026-02-07 03:00:44 +00:00
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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user