浏览代码

rxrpc: Adjust the call ref tracepoint to show kernel API refs

Adjust the call ref tracepoint to show references held on a call by the
kernel API separately as much as possible and add an additional trace to at
the allocation point from the preallocation buffer for an incoming call.

Note that this doesn't show the allocation of a client call for the kernel
separately at the moment.

Signed-off-by: David Howells <dhowells@redhat.com>
David Howells 9 年之前
父节点
当前提交
cbd00891de
共有 4 个文件被更改,包括 7 次插入2 次删除
  1. 1 1
      net/rxrpc/af_rxrpc.c
  2. 2 0
      net/rxrpc/ar-internal.h
  3. 2 1
      net/rxrpc/call_accept.c
  4. 2 0
      net/rxrpc/call_object.c

+ 1 - 1
net/rxrpc/af_rxrpc.c

@@ -299,7 +299,7 @@ void rxrpc_kernel_end_call(struct socket *sock, struct rxrpc_call *call)
 {
 {
 	_enter("%d{%d}", call->debug_id, atomic_read(&call->usage));
 	_enter("%d{%d}", call->debug_id, atomic_read(&call->usage));
 	rxrpc_release_call(rxrpc_sk(sock->sk), call);
 	rxrpc_release_call(rxrpc_sk(sock->sk), call);
-	rxrpc_put_call(call, rxrpc_call_put);
+	rxrpc_put_call(call, rxrpc_call_put_kernel);
 }
 }
 EXPORT_SYMBOL(rxrpc_kernel_end_call);
 EXPORT_SYMBOL(rxrpc_kernel_end_call);
 
 

+ 2 - 0
net/rxrpc/ar-internal.h

@@ -540,8 +540,10 @@ enum rxrpc_call_trace {
 	rxrpc_call_seen,
 	rxrpc_call_seen,
 	rxrpc_call_got,
 	rxrpc_call_got,
 	rxrpc_call_got_userid,
 	rxrpc_call_got_userid,
+	rxrpc_call_got_kernel,
 	rxrpc_call_put,
 	rxrpc_call_put,
 	rxrpc_call_put_userid,
 	rxrpc_call_put_userid,
+	rxrpc_call_put_kernel,
 	rxrpc_call_put_noqueue,
 	rxrpc_call_put_noqueue,
 	rxrpc_call__nr_trace
 	rxrpc_call__nr_trace
 };
 };

+ 2 - 1
net/rxrpc/call_accept.c

@@ -121,7 +121,7 @@ static int rxrpc_service_prealloc_one(struct rxrpc_sock *rx,
 
 
 		call->user_call_ID = user_call_ID;
 		call->user_call_ID = user_call_ID;
 		call->notify_rx = notify_rx;
 		call->notify_rx = notify_rx;
-		rxrpc_get_call(call, rxrpc_call_got);
+		rxrpc_get_call(call, rxrpc_call_got_kernel);
 		user_attach_call(call, user_call_ID);
 		user_attach_call(call, user_call_ID);
 		rxrpc_get_call(call, rxrpc_call_got_userid);
 		rxrpc_get_call(call, rxrpc_call_got_userid);
 		rb_link_node(&call->sock_node, parent, pp);
 		rb_link_node(&call->sock_node, parent, pp);
@@ -300,6 +300,7 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
 	smp_store_release(&b->call_backlog_tail,
 	smp_store_release(&b->call_backlog_tail,
 			  (call_tail + 1) & (RXRPC_BACKLOG_MAX - 1));
 			  (call_tail + 1) & (RXRPC_BACKLOG_MAX - 1));
 
 
+	rxrpc_see_call(call);
 	call->conn = conn;
 	call->conn = conn;
 	call->peer = rxrpc_get_peer(conn->params.peer);
 	call->peer = rxrpc_get_peer(conn->params.peer);
 	return call;
 	return call;

+ 2 - 0
net/rxrpc/call_object.c

@@ -56,8 +56,10 @@ const char rxrpc_call_traces[rxrpc_call__nr_trace][4] = {
 	[rxrpc_call_seen]		= "SEE",
 	[rxrpc_call_seen]		= "SEE",
 	[rxrpc_call_got]		= "GOT",
 	[rxrpc_call_got]		= "GOT",
 	[rxrpc_call_got_userid]		= "Gus",
 	[rxrpc_call_got_userid]		= "Gus",
+	[rxrpc_call_got_kernel]		= "Gke",
 	[rxrpc_call_put]		= "PUT",
 	[rxrpc_call_put]		= "PUT",
 	[rxrpc_call_put_userid]		= "Pus",
 	[rxrpc_call_put_userid]		= "Pus",
+	[rxrpc_call_put_kernel]		= "Pke",
 	[rxrpc_call_put_noqueue]	= "PNQ",
 	[rxrpc_call_put_noqueue]	= "PNQ",
 };
 };