summaryrefslogtreecommitdiff
path: root/include/trace
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2024-12-16 20:41:14 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-02-08 09:56:50 +0100
commit966a8ea200020f4629bc1f84e6d11de9d48720ae (patch)
tree4874bfef096549056ad5d0befee33e477d96eec7 /include/trace
parent47b3d95c06056588d081fd88c29af1d3bb495c7f (diff)
downloadlinux-966a8ea200020f4629bc1f84e6d11de9d48720ae.tar.gz
linux-966a8ea200020f4629bc1f84e6d11de9d48720ae.tar.bz2
linux-966a8ea200020f4629bc1f84e6d11de9d48720ae.zip
afs: Fix cleanup of immediately failed async calls
[ Upstream commit 9750be93b2be12b6d92323b97d7c055099d279e6 ] If we manage to begin an async call, but fail to transmit any data on it due to a signal, we then abort it which causes a race between the notification of call completion from rxrpc and our attempt to cancel the notification. The notification will be necessary, however, for async FetchData to terminate the netfs subrequest. However, since we get a notification from rxrpc upon completion of a call (aborted or otherwise), we can just leave it to that. This leads to calls not getting cleaned up, but appearing in /proc/net/rxrpc/calls as being aborted with code 6. Fix this by making the "error_do_abort:" case of afs_make_call() abort the call and then abandon it to the notification handler. Fixes: 34fa47612bfe ("afs: Fix race in async call refcounting") Reported-by: Marc Dionne <marc.dionne@auristor.com> Signed-off-by: David Howells <dhowells@redhat.com> Link: https://lore.kernel.org/r/20241216204124.3752367-25-dhowells@redhat.com cc: linux-afs@lists.infradead.org Signed-off-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include/trace')
-rw-r--r--include/trace/events/afs.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/trace/events/afs.h b/include/trace/events/afs.h
index a0aed1a428a1..9a75590227f2 100644
--- a/include/trace/events/afs.h
+++ b/include/trace/events/afs.h
@@ -118,6 +118,8 @@ enum yfs_cm_operation {
*/
#define afs_call_traces \
EM(afs_call_trace_alloc, "ALLOC") \
+ EM(afs_call_trace_async_abort, "ASYAB") \
+ EM(afs_call_trace_async_kill, "ASYKL") \
EM(afs_call_trace_free, "FREE ") \
EM(afs_call_trace_get, "GET ") \
EM(afs_call_trace_put, "PUT ") \