Skip to content

Commit 003691a

Browse files
dhowellsgregkh
authored andcommitted
afs: Improve server refcount/active count tracing
[ Upstream commit 76daa30 ] 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 Stable-dep-of: 330e2c5 ("afs: Fix dynamic lookup to fail on cell lookup failure") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent e4187ce commit 003691a

5 files changed

Lines changed: 26 additions & 22 deletions

File tree

fs/afs/fsclient.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1650,7 +1650,7 @@ int afs_fs_give_up_all_callbacks(struct afs_net *net, struct afs_server *server,
16501650
bp = call->request;
16511651
*bp++ = htonl(FSGIVEUPALLCALLBACKS);
16521652

1653-
call->server = afs_use_server(server, afs_server_trace_give_up_cb);
1653+
call->server = afs_use_server(server, afs_server_trace_use_give_up_cb);
16541654
afs_make_call(call, GFP_NOFS);
16551655
afs_wait_for_call_to_complete(call);
16561656
ret = call->error;
@@ -1756,7 +1756,7 @@ bool afs_fs_get_capabilities(struct afs_net *net, struct afs_server *server,
17561756
return false;
17571757

17581758
call->key = key;
1759-
call->server = afs_use_server(server, afs_server_trace_get_caps);
1759+
call->server = afs_use_server(server, afs_server_trace_use_get_caps);
17601760
call->peer = rxrpc_kernel_get_peer(estate->addresses->addrs[addr_index].peer);
17611761
call->probe = afs_get_endpoint_state(estate, afs_estate_trace_get_getcaps);
17621762
call->probe_index = addr_index;

fs/afs/rxrpc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ static void afs_free_call(struct afs_call *call)
190190
if (call->type->destructor)
191191
call->type->destructor(call);
192192

193-
afs_unuse_server_notime(call->net, call->server, afs_server_trace_put_call);
193+
afs_unuse_server_notime(call->net, call->server, afs_server_trace_unuse_call);
194194
kfree(call->request);
195195

196196
o = atomic_read(&net->nr_outstanding_calls);

fs/afs/server.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct afs_server *afs_find_server(struct afs_net *net, const struct rxrpc_peer
3333

3434
do {
3535
if (server)
36-
afs_unuse_server_notime(net, server, afs_server_trace_put_find_rsq);
36+
afs_unuse_server_notime(net, server, afs_server_trace_unuse_find_rsq);
3737
server = NULL;
3838
seq++; /* 2 on the 1st/lockless path, otherwise odd */
3939
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
4949
server = NULL;
5050
continue;
5151
found:
52-
server = afs_maybe_use_server(server, afs_server_trace_get_by_addr);
52+
server = afs_maybe_use_server(server, afs_server_trace_use_by_addr);
5353

5454
} while (need_seqretry(&net->fs_addr_lock, seq));
5555

@@ -76,7 +76,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu
7676
* changes.
7777
*/
7878
if (server)
79-
afs_unuse_server(net, server, afs_server_trace_put_uuid_rsq);
79+
afs_unuse_server(net, server, afs_server_trace_unuse_uuid_rsq);
8080
server = NULL;
8181
seq++; /* 2 on the 1st/lockless path, otherwise odd */
8282
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
9191
} else if (diff > 0) {
9292
p = p->rb_right;
9393
} else {
94-
afs_use_server(server, afs_server_trace_get_by_uuid);
94+
afs_use_server(server, afs_server_trace_use_by_uuid);
9595
break;
9696
}
9797

@@ -273,7 +273,8 @@ static struct afs_addr_list *afs_vl_lookup_addrs(struct afs_cell *cell,
273273
}
274274

275275
/*
276-
* Get or create a fileserver record.
276+
* Get or create a fileserver record and return it with an active-use count on
277+
* it.
277278
*/
278279
struct afs_server *afs_lookup_server(struct afs_cell *cell, struct key *key,
279280
const uuid_t *uuid, u32 addr_version)

fs/afs/server_list.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ void afs_put_serverlist(struct afs_net *net, struct afs_server_list *slist)
1616
if (slist && refcount_dec_and_test(&slist->usage)) {
1717
for (i = 0; i < slist->nr_servers; i++)
1818
afs_unuse_server(net, slist->servers[i].server,
19-
afs_server_trace_put_slist);
19+
afs_server_trace_unuse_slist);
2020
kfree_rcu(slist, rcu);
2121
}
2222
}
@@ -98,7 +98,7 @@ struct afs_server_list *afs_alloc_server_list(struct afs_volume *volume,
9898
if (j < slist->nr_servers) {
9999
if (slist->servers[j].server == server) {
100100
afs_unuse_server(volume->cell->net, server,
101-
afs_server_trace_put_slist_isort);
101+
afs_server_trace_unuse_slist_isort);
102102
continue;
103103
}
104104

include/trace/events/afs.h

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,22 +132,25 @@ enum yfs_cm_operation {
132132
EM(afs_server_trace_destroy, "DESTROY ") \
133133
EM(afs_server_trace_free, "FREE ") \
134134
EM(afs_server_trace_gc, "GC ") \
135-
EM(afs_server_trace_get_by_addr, "GET addr ") \
136-
EM(afs_server_trace_get_by_uuid, "GET uuid ") \
137-
EM(afs_server_trace_get_caps, "GET caps ") \
138135
EM(afs_server_trace_get_install, "GET inst ") \
139-
EM(afs_server_trace_get_new_cbi, "GET cbi ") \
140136
EM(afs_server_trace_get_probe, "GET probe") \
141-
EM(afs_server_trace_give_up_cb, "giveup-cb") \
142137
EM(afs_server_trace_purging, "PURGE ") \
143-
EM(afs_server_trace_put_call, "PUT call ") \
144138
EM(afs_server_trace_put_cbi, "PUT cbi ") \
145-
EM(afs_server_trace_put_find_rsq, "PUT f-rsq") \
146139
EM(afs_server_trace_put_probe, "PUT probe") \
147-
EM(afs_server_trace_put_slist, "PUT slist") \
148-
EM(afs_server_trace_put_slist_isort, "PUT isort") \
149-
EM(afs_server_trace_put_uuid_rsq, "PUT u-req") \
150-
E_(afs_server_trace_update, "UPDATE")
140+
EM(afs_server_trace_see_expired, "SEE expd ") \
141+
EM(afs_server_trace_unuse_call, "UNU call ") \
142+
EM(afs_server_trace_unuse_create_fail, "UNU cfail") \
143+
EM(afs_server_trace_unuse_find_rsq, "UNU f-rsq") \
144+
EM(afs_server_trace_unuse_slist, "UNU slist") \
145+
EM(afs_server_trace_unuse_slist_isort, "UNU isort") \
146+
EM(afs_server_trace_unuse_uuid_rsq, "PUT u-req") \
147+
EM(afs_server_trace_update, "UPDATE ") \
148+
EM(afs_server_trace_use_by_addr, "USE addr ") \
149+
EM(afs_server_trace_use_by_uuid, "USE uuid ") \
150+
EM(afs_server_trace_use_cm_call, "USE cm-cl") \
151+
EM(afs_server_trace_use_get_caps, "USE gcaps") \
152+
EM(afs_server_trace_use_give_up_cb, "USE gvupc") \
153+
E_(afs_server_trace_wait_create, "WAIT crt ")
151154

152155
#define afs_volume_traces \
153156
EM(afs_volume_trace_alloc, "ALLOC ") \
@@ -1369,7 +1372,7 @@ TRACE_EVENT(afs_server,
13691372
__entry->reason = reason;
13701373
),
13711374

1372-
TP_printk("s=%08x %s u=%d a=%d",
1375+
TP_printk("s=%08x %s r=%d a=%d",
13731376
__entry->server,
13741377
__print_symbolic(__entry->reason, afs_server_traces),
13751378
__entry->ref,

0 commit comments

Comments
 (0)