diff options
author | 2025-02-14 10:16:21 +0000 | |
---|---|---|
committer | 2025-03-10 09:47:15 +0000 | |
commit | 76daa300d41acc1180f8a46eead36905054beafb (patch) | |
tree | 127e34627b6e0cd6e44c11134857c93cf6c010e3 /fs/afs | |
parent | afs: Improve afs_volume tracing to display a debug ID (diff) | |
download | wireguard-linux-76daa300d41acc1180f8a46eead36905054beafb.tar.xz wireguard-linux-76daa300d41acc1180f8a46eead36905054beafb.zip |
afs: Improve server refcount/active count tracing
Improve server refcount/active count tracing to distinguish between simply
getting/putting a ref and using/unusing the server record (which changes
the activity count as well as the refcount). This makes it a bit easier to
work out what's going on.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
cc: linux-fsdevel@vger.kernel.org
Link: https://lore.kernel.org/r/20250224234154.2014840-10-dhowells@redhat.com/ # v1
Link: https://lore.kernel.org/r/20250310094206.801057-6-dhowells@redhat.com/ # v4
Diffstat (limited to 'fs/afs')
-rw-r--r-- | fs/afs/fsclient.c | 4 | ||||
-rw-r--r-- | fs/afs/rxrpc.c | 2 | ||||
-rw-r--r-- | fs/afs/server.c | 11 | ||||
-rw-r--r-- | fs/afs/server_list.c | 4 |
4 files changed, 11 insertions, 10 deletions
diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c index 1d9ecd5418d8..9f46d9aebc33 100644 --- a/fs/afs/fsclient.c +++ b/fs/afs/fsclient.c @@ -1653,7 +1653,7 @@ int afs_fs_give_up_all_callbacks(struct afs_net *net, struct afs_server *server, bp = call->request; *bp++ = htonl(FSGIVEUPALLCALLBACKS); - call->server = afs_use_server(server, afs_server_trace_give_up_cb); + call->server = afs_use_server(server, afs_server_trace_use_give_up_cb); afs_make_call(call, GFP_NOFS); afs_wait_for_call_to_complete(call); ret = call->error; @@ -1760,7 +1760,7 @@ bool afs_fs_get_capabilities(struct afs_net *net, struct afs_server *server, return false; call->key = key; - call->server = afs_use_server(server, afs_server_trace_get_caps); + call->server = afs_use_server(server, afs_server_trace_use_get_caps); call->peer = rxrpc_kernel_get_peer(estate->addresses->addrs[addr_index].peer); call->probe = afs_get_endpoint_state(estate, afs_estate_trace_get_getcaps); call->probe_index = addr_index; diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c index 886416ea1d96..de9e10575bdd 100644 --- a/fs/afs/rxrpc.c +++ b/fs/afs/rxrpc.c @@ -179,7 +179,7 @@ static void afs_free_call(struct afs_call *call) if (call->type->destructor) call->type->destructor(call); - afs_unuse_server_notime(call->net, call->server, afs_server_trace_put_call); + afs_unuse_server_notime(call->net, call->server, afs_server_trace_unuse_call); kfree(call->request); o = atomic_read(&net->nr_outstanding_calls); diff --git a/fs/afs/server.c b/fs/afs/server.c index 4504e16b458c..923e07c37032 100644 --- a/fs/afs/server.c +++ b/fs/afs/server.c @@ -33,7 +33,7 @@ struct afs_server *afs_find_server(struct afs_net *net, const struct rxrpc_peer do { if (server) - afs_unuse_server_notime(net, server, afs_server_trace_put_find_rsq); + afs_unuse_server_notime(net, server, afs_server_trace_unuse_find_rsq); server = NULL; seq++; /* 2 on the 1st/lockless path, otherwise odd */ read_seqbegin_or_lock(&net->fs_addr_lock, &seq); @@ -49,7 +49,7 @@ struct afs_server *afs_find_server(struct afs_net *net, const struct rxrpc_peer server = NULL; continue; found: - server = afs_maybe_use_server(server, afs_server_trace_get_by_addr); + server = afs_maybe_use_server(server, afs_server_trace_use_by_addr); } while (need_seqretry(&net->fs_addr_lock, seq)); @@ -76,7 +76,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu * changes. */ if (server) - afs_unuse_server(net, server, afs_server_trace_put_uuid_rsq); + afs_unuse_server(net, server, afs_server_trace_unuse_uuid_rsq); server = NULL; seq++; /* 2 on the 1st/lockless path, otherwise odd */ read_seqbegin_or_lock(&net->fs_lock, &seq); @@ -91,7 +91,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu } else if (diff > 0) { p = p->rb_right; } else { - afs_use_server(server, afs_server_trace_get_by_uuid); + afs_use_server(server, afs_server_trace_use_by_uuid); break; } @@ -273,7 +273,8 @@ static struct afs_addr_list *afs_vl_lookup_addrs(struct afs_cell *cell, } /* - * Get or create a fileserver record. + * Get or create a fileserver record and return it with an active-use count on + * it. */ struct afs_server *afs_lookup_server(struct afs_cell *cell, struct key *key, const uuid_t *uuid, u32 addr_version) diff --git a/fs/afs/server_list.c b/fs/afs/server_list.c index d20cd902ef94..784236b9b2a9 100644 --- a/fs/afs/server_list.c +++ b/fs/afs/server_list.c @@ -16,7 +16,7 @@ void afs_put_serverlist(struct afs_net *net, struct afs_server_list *slist) if (slist && refcount_dec_and_test(&slist->usage)) { for (i = 0; i < slist->nr_servers; i++) afs_unuse_server(net, slist->servers[i].server, - afs_server_trace_put_slist); + afs_server_trace_unuse_slist); kfree_rcu(slist, rcu); } } @@ -98,7 +98,7 @@ struct afs_server_list *afs_alloc_server_list(struct afs_volume *volume, if (j < slist->nr_servers) { if (slist->servers[j].server == server) { afs_unuse_server(volume->cell->net, server, - afs_server_trace_put_slist_isort); + afs_server_trace_unuse_slist_isort); continue; } |