| From 5d15dac0c5a777ba82d14edcd4f267bdffda97f3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 15 Oct 2020 09:02:25 +0100 |
| Subject: afs: Don't assert on unpurgeable server records |
| |
| From: David Howells <dhowells@redhat.com> |
| |
| [ Upstream commit 7530d3eb3dcf1a30750e8e7f1f88b782b96b72b8 ] |
| |
| Don't give an assertion failure on unpurgeable afs_server records - which |
| kills the thread - but rather emit a trace line when we are purging a |
| record (which only happens during network namespace removal or rmmod) and |
| print a notice of the problem. |
| |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/afs/server.c | 7 ++++++- |
| include/trace/events/afs.h | 2 ++ |
| 2 files changed, 8 insertions(+), 1 deletion(-) |
| |
| diff --git a/fs/afs/server.c b/fs/afs/server.c |
| index e82e452e26124..684a2b02b9ff7 100644 |
| --- a/fs/afs/server.c |
| +++ b/fs/afs/server.c |
| @@ -550,7 +550,12 @@ void afs_manage_servers(struct work_struct *work) |
| |
| _debug("manage %pU %u", &server->uuid, active); |
| |
| - ASSERTIFCMP(purging, active, ==, 0); |
| + if (purging) { |
| + trace_afs_server(server, atomic_read(&server->ref), |
| + active, afs_server_trace_purging); |
| + if (active != 0) |
| + pr_notice("Can't purge s=%08x\n", server->debug_id); |
| + } |
| |
| if (active == 0) { |
| time64_t expire_at = server->unuse_time; |
| diff --git a/include/trace/events/afs.h b/include/trace/events/afs.h |
| index 13c05e28c0b6c..342b35fc33c59 100644 |
| --- a/include/trace/events/afs.h |
| +++ b/include/trace/events/afs.h |
| @@ -40,6 +40,7 @@ enum afs_server_trace { |
| afs_server_trace_get_new_cbi, |
| afs_server_trace_get_probe, |
| afs_server_trace_give_up_cb, |
| + afs_server_trace_purging, |
| afs_server_trace_put_call, |
| afs_server_trace_put_cbi, |
| afs_server_trace_put_find_rsq, |
| @@ -270,6 +271,7 @@ enum afs_cb_break_reason { |
| 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") \ |
| -- |
| 2.27.0 |
| |