]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
afs: Improve server refcount/active count tracing
authorDavid Howells <dhowells@redhat.com>
Fri, 14 Feb 2025 10:16:21 +0000 (10:16 +0000)
committerDavid Howells <dhowells@redhat.com>
Mon, 10 Mar 2025 09:47:15 +0000 (09:47 +0000)
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/
Link: https://lore.kernel.org/r/20250310094206.801057-6-dhowells@redhat.com/
fs/afs/fsclient.c
fs/afs/rxrpc.c
fs/afs/server.c
fs/afs/server_list.c
include/trace/events/afs.h

index 1d9ecd5418d897413a61306a56ec9c0f3c0a8c0d..9f46d9aebc332a45899e3e32d9fbb09d756bf2bf 100644 (file)
@@ -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;
index 886416ea1d960d3464c8991692a7e12b4c29c003..de9e10575bdd1aaad070dafc23e8796fd88dbd4e 100644 (file)
@@ -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);
index 4504e16b458cc1153db19f5a310e10afc6a186c6..923e07c3703271d16a01829cefed8d69adbf282a 100644 (file)
@@ -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)
index d20cd902ef949ac89ee89709a5d3e7c995f66f31..784236b9b2a9e023f24b14f7b91406c312cab2e8 100644 (file)
@@ -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;
                        }
 
index cf94bf1e8286dad1e2637d0919a85c4056d60967..24d99fbc298f6cb1db9a62d85b674ffa90edb611 100644 (file)
@@ -132,22 +132,25 @@ enum yfs_cm_operation {
        EM(afs_server_trace_destroy,            "DESTROY  ") \
        EM(afs_server_trace_free,               "FREE     ") \
        EM(afs_server_trace_gc,                 "GC       ") \
-       EM(afs_server_trace_get_by_addr,        "GET addr ") \
-       EM(afs_server_trace_get_by_uuid,        "GET uuid ") \
-       EM(afs_server_trace_get_caps,           "GET caps ") \
        EM(afs_server_trace_get_install,        "GET inst ") \
-       EM(afs_server_trace_get_new_cbi,        "GET cbi  ") \
        EM(afs_server_trace_get_probe,          "GET probe") \
-       EM(afs_server_trace_give_up_cb,         "giveup-cb") \
        EM(afs_server_trace_purging,            "PURGE    ") \
-       EM(afs_server_trace_put_call,           "PUT call ") \
        EM(afs_server_trace_put_cbi,            "PUT cbi  ") \
-       EM(afs_server_trace_put_find_rsq,       "PUT f-rsq") \
        EM(afs_server_trace_put_probe,          "PUT probe") \
-       EM(afs_server_trace_put_slist,          "PUT slist") \
-       EM(afs_server_trace_put_slist_isort,    "PUT isort") \
-       EM(afs_server_trace_put_uuid_rsq,       "PUT u-req") \
-       E_(afs_server_trace_update,             "UPDATE")
+       EM(afs_server_trace_see_expired,        "SEE expd ") \
+       EM(afs_server_trace_unuse_call,         "UNU call ") \
+       EM(afs_server_trace_unuse_create_fail,  "UNU cfail") \
+       EM(afs_server_trace_unuse_find_rsq,     "UNU f-rsq") \
+       EM(afs_server_trace_unuse_slist,        "UNU slist") \
+       EM(afs_server_trace_unuse_slist_isort,  "UNU isort") \
+       EM(afs_server_trace_unuse_uuid_rsq,     "PUT u-req") \
+       EM(afs_server_trace_update,             "UPDATE   ") \
+       EM(afs_server_trace_use_by_addr,        "USE addr ") \
+       EM(afs_server_trace_use_by_uuid,        "USE uuid ") \
+       EM(afs_server_trace_use_cm_call,        "USE cm-cl") \
+       EM(afs_server_trace_use_get_caps,       "USE gcaps") \
+       EM(afs_server_trace_use_give_up_cb,     "USE gvupc") \
+       E_(afs_server_trace_wait_create,        "WAIT crt ")
 
 #define afs_volume_traces \
        EM(afs_volume_trace_alloc,              "ALLOC         ") \
@@ -1531,7 +1534,7 @@ TRACE_EVENT(afs_server,
                    __entry->reason = reason;
                           ),
 
-           TP_printk("s=%08x %s u=%d a=%d",
+           TP_printk("s=%08x %s r=%d a=%d",
                      __entry->server,
                      __print_symbolic(__entry->reason, afs_server_traces),
                      __entry->ref,