SUNRPC: Trace server-side rpcbind registration events

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Chuck Lever 2020-05-02 11:59:37 -04:00
parent a0469f46fa
commit b4af59328c
2 changed files with 84 additions and 15 deletions

View file

@ -1581,6 +1581,86 @@ DEFINE_CACHE_EVENT(cache_entry_update);
DEFINE_CACHE_EVENT(cache_entry_make_negative);
DEFINE_CACHE_EVENT(cache_entry_no_listener);
DECLARE_EVENT_CLASS(register_class,
TP_PROTO(
const char *program,
const u32 version,
const int family,
const unsigned short protocol,
const unsigned short port,
int error
),
TP_ARGS(program, version, family, protocol, port, error),
TP_STRUCT__entry(
__field(u32, version)
__field(unsigned long, family)
__field(unsigned short, protocol)
__field(unsigned short, port)
__field(int, error)
__string(program, program)
),
TP_fast_assign(
__entry->version = version;
__entry->family = family;
__entry->protocol = protocol;
__entry->port = port;
__entry->error = error;
__assign_str(program, program);
),
TP_printk("program=%sv%u proto=%s port=%u family=%s error=%d",
__get_str(program), __entry->version,
__entry->protocol == IPPROTO_UDP ? "udp" : "tcp",
__entry->port, rpc_show_address_family(__entry->family),
__entry->error
)
);
#define DEFINE_REGISTER_EVENT(name) \
DEFINE_EVENT(register_class, svc_##name, \
TP_PROTO( \
const char *program, \
const u32 version, \
const int family, \
const unsigned short protocol, \
const unsigned short port, \
int error \
), \
TP_ARGS(program, version, family, protocol, \
port, error))
DEFINE_REGISTER_EVENT(register);
DEFINE_REGISTER_EVENT(noregister);
TRACE_EVENT(svc_unregister,
TP_PROTO(
const char *program,
const u32 version,
int error
),
TP_ARGS(program, version, error),
TP_STRUCT__entry(
__field(u32, version)
__field(int, error)
__string(program, program)
),
TP_fast_assign(
__entry->version = version;
__entry->error = error;
__assign_str(program, program);
),
TP_printk("program=%sv%u error=%d",
__get_str(program), __entry->version, __entry->error
)
);
#endif /* _TRACE_SUNRPC_H */
#include <trace/define_trace.h>

View file

@ -991,6 +991,7 @@ static int __svc_register(struct net *net, const char *progname,
#endif
}
trace_svc_register(progname, version, protocol, port, family, error);
return error;
}
@ -1000,11 +1001,6 @@ int svc_rpcbind_set_version(struct net *net,
unsigned short proto,
unsigned short port)
{
dprintk("svc: svc_register(%sv%d, %s, %u, %u)\n",
progp->pg_name, version,
proto == IPPROTO_UDP? "udp" : "tcp",
port, family);
return __svc_register(net, progp->pg_name, progp->pg_prog,
version, family, proto, port);
@ -1024,11 +1020,8 @@ int svc_generic_rpcbind_set(struct net *net,
return 0;
if (vers->vs_hidden) {
dprintk("svc: svc_register(%sv%d, %s, %u, %u)"
" (but not telling portmap)\n",
progp->pg_name, version,
proto == IPPROTO_UDP? "udp" : "tcp",
port, family);
trace_svc_noregister(progp->pg_name, version, proto,
port, family, 0);
return 0;
}
@ -1106,8 +1099,7 @@ static void __svc_unregister(struct net *net, const u32 program, const u32 versi
if (error == -EPROTONOSUPPORT)
error = rpcb_register(net, program, version, 0, 0);
dprintk("svc: %s(%sv%u), error %d\n",
__func__, progname, version, error);
trace_svc_unregister(progname, version, error);
}
/*
@ -1132,9 +1124,6 @@ static void svc_unregister(const struct svc_serv *serv, struct net *net)
continue;
if (progp->pg_vers[i]->vs_hidden)
continue;
dprintk("svc: attempting to unregister %sv%u\n",
progp->pg_name, i);
__svc_unregister(net, progp->pg_prog, i, progp->pg_name);
}
}