Commit 45218193 authored by David Howells's avatar David Howells
Browse files

afs: Trace afs_server usage



Add a tracepoint (afs_server) to track the afs_server object usage count.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent 051d2525
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ static struct afs_cb_interest *afs_create_interest(struct afs_server *server,
	refcount_set(&new->usage, 1);
	new->sb = vnode->vfs_inode.i_sb;
	new->vid = vnode->volume->vid;
	new->server = afs_get_server(server);
	new->server = afs_get_server(server, afs_server_trace_get_new_cbi);
	INIT_HLIST_NODE(&new->cb_vlink);

	write_lock(&server->cb_break_lock);
@@ -195,7 +195,7 @@ void afs_put_cb_interest(struct afs_net *net, struct afs_cb_interest *cbi)
			write_unlock(&cbi->server->cb_break_lock);
			if (vi)
				kfree_rcu(vi, rcu);
			afs_put_server(net, cbi->server);
			afs_put_server(net, cbi->server, afs_server_trace_put_cbi);
		}
		kfree_rcu(cbi, rcu);
	}
+4 −1
Original line number Diff line number Diff line
@@ -260,8 +260,11 @@ static void SRXAFSCB_CallBack(struct work_struct *work)
	 * server holds up change visibility till it receives our reply so as
	 * to maintain cache coherency.
	 */
	if (call->server)
	if (call->server) {
		trace_afs_server(call->server, atomic_read(&call->server->usage),
				 afs_server_trace_callback);
		afs_break_callbacks(call->server, call->count, call->request);
	}

	afs_send_empty_reply(call);
	afs_put_call(call);
+1 −1
Original line number Diff line number Diff line
@@ -1915,7 +1915,7 @@ struct afs_call *afs_fs_get_capabilities(struct afs_net *net,
		return ERR_PTR(-ENOMEM);

	call->key = key;
	call->server = afs_get_server(server);
	call->server = afs_get_server(server, afs_server_trace_get_caps);
	call->server_index = server_index;
	call->upgrade = true;
	call->async = true;
+3 −7
Original line number Diff line number Diff line
@@ -518,6 +518,7 @@ struct afs_server {
	atomic_t		usage;
	u32			addr_version;	/* Address list version */
	u32			cm_epoch;	/* Server RxRPC epoch */
	unsigned int		debug_id;	/* Debugging ID for traces */

	/* file service access */
	rwlock_t		fs_lock;	/* access lock */
@@ -1244,17 +1245,12 @@ extern void __exit afs_clean_up_permit_cache(void);
 */
extern spinlock_t afs_server_peer_lock;

static inline struct afs_server *afs_get_server(struct afs_server *server)
{
	atomic_inc(&server->usage);
	return server;
}

extern struct afs_server *afs_find_server(struct afs_net *,
					  const struct sockaddr_rxrpc *);
extern struct afs_server *afs_find_server_by_uuid(struct afs_net *, const uuid_t *);
extern struct afs_server *afs_lookup_server(struct afs_cell *, struct key *, const uuid_t *);
extern void afs_put_server(struct afs_net *, struct afs_server *);
extern struct afs_server *afs_get_server(struct afs_server *, enum afs_server_trace);
extern void afs_put_server(struct afs_net *, struct afs_server *, enum afs_server_trace);
extern void afs_manage_servers(struct work_struct *);
extern void afs_servers_timer(struct timer_list *);
extern void __net_exit afs_purge_servers(struct afs_net *);
+1 −1
Original line number Diff line number Diff line
@@ -188,7 +188,7 @@ void afs_put_call(struct afs_call *call)
		if (call->type->destructor)
			call->type->destructor(call);

		afs_put_server(call->net, call->server);
		afs_put_server(call->net, call->server, afs_server_trace_put_call);
		afs_put_cb_interest(call->net, call->cbi);
		afs_put_addrlist(call->alist);
		kfree(call->request);
Loading