SUNRPC: Trace server-side rpcbind registration events
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Родитель
a0469f46fa
Коммит
b4af59328c
|
@ -1581,6 +1581,86 @@ DEFINE_CACHE_EVENT(cache_entry_update);
|
||||||
DEFINE_CACHE_EVENT(cache_entry_make_negative);
|
DEFINE_CACHE_EVENT(cache_entry_make_negative);
|
||||||
DEFINE_CACHE_EVENT(cache_entry_no_listener);
|
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 */
|
#endif /* _TRACE_SUNRPC_H */
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
|
|
@ -991,6 +991,7 @@ static int __svc_register(struct net *net, const char *progname,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_svc_register(progname, version, protocol, port, family, error);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1000,11 +1001,6 @@ int svc_rpcbind_set_version(struct net *net,
|
||||||
unsigned short proto,
|
unsigned short proto,
|
||||||
unsigned short port)
|
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,
|
return __svc_register(net, progp->pg_name, progp->pg_prog,
|
||||||
version, family, proto, port);
|
version, family, proto, port);
|
||||||
|
|
||||||
|
@ -1024,11 +1020,8 @@ int svc_generic_rpcbind_set(struct net *net,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (vers->vs_hidden) {
|
if (vers->vs_hidden) {
|
||||||
dprintk("svc: svc_register(%sv%d, %s, %u, %u)"
|
trace_svc_noregister(progp->pg_name, version, proto,
|
||||||
" (but not telling portmap)\n",
|
port, family, 0);
|
||||||
progp->pg_name, version,
|
|
||||||
proto == IPPROTO_UDP? "udp" : "tcp",
|
|
||||||
port, family);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1106,8 +1099,7 @@ static void __svc_unregister(struct net *net, const u32 program, const u32 versi
|
||||||
if (error == -EPROTONOSUPPORT)
|
if (error == -EPROTONOSUPPORT)
|
||||||
error = rpcb_register(net, program, version, 0, 0);
|
error = rpcb_register(net, program, version, 0, 0);
|
||||||
|
|
||||||
dprintk("svc: %s(%sv%u), error %d\n",
|
trace_svc_unregister(progname, version, error);
|
||||||
__func__, progname, version, error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1132,9 +1124,6 @@ static void svc_unregister(const struct svc_serv *serv, struct net *net)
|
||||||
continue;
|
continue;
|
||||||
if (progp->pg_vers[i]->vs_hidden)
|
if (progp->pg_vers[i]->vs_hidden)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
dprintk("svc: attempting to unregister %sv%u\n",
|
|
||||||
progp->pg_name, i);
|
|
||||||
__svc_unregister(net, progp->pg_prog, i, progp->pg_name);
|
__svc_unregister(net, progp->pg_prog, i, progp->pg_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче