forked from mirrors/linux
		
	SUNRPC: Trace server-side rpcbind registration events
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
		
							parent
							
								
									a0469f46fa
								
							
						
					
					
						commit
						b4af59328c
					
				
					 2 changed files with 84 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue