[PATCH net 0/6] rxrpc, afs: Interruptibility fixes

From: David Howells
Date: Thu Mar 19 2020 - 07:53:41 EST



Here are a number of fixes for AF_RXRPC and AFS that make AFS system calls
less interruptible and so less likely to leave the filesystem in an
uncertain state. There's also a miscellaneous patch to make tracing
consistent.

(1) Firstly, abstract out the Tx space calculation in sendmsg. Much the
same code is replicated in a number of places that subsequent patches
are going to alter, including adding another copy.

(2) Fix Tx interruptibility by allowing a kernel service, such as AFS, to
request that a call be interruptible only when waiting for a call slot
to become available (ie. the call has not taken place yet) or that a
call be not interruptible at all (e.g. when we want to do writeback
and don't want a signal interrupting a VM-induced writeback).

(3) Increase the minimum delay on MSG_WAITALL for userspace sendmsg() when
waiting for Tx buffer space as a 2*RTT delay is really small over 10G
ethernet and a 1 jiffy timeout might be essentially 0 if at the end of
the jiffy period.

(4) Fix some tracing output in AFS to make it consistent with rxrpc.

(5) Make sure aborted asynchronous AFS operations are tidied up properly
so we don't end up with stuck rxrpc calls.

(6) Make AFS client calls uninterruptible in the Rx phase. If we don't
wait for the reply to be fully gathered, we can't update the local VFS
state and we end up in an indeterminate state with respect to the
server.

The patches are tagged here:

git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git
rxrpc-fixes-20200319

and can also be found on the following branch:

http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=rxrpc-fixes

David
---
David Howells (6):
rxrpc: Abstract out the calculation of whether there's Tx space
rxrpc: Fix call interruptibility handling
rxrpc: Fix sendmsg(MSG_WAITALL) handling
afs: Fix some tracing details
afs: Fix handling of an abort from a service handler
afs: Fix client call Rx-phase signal handling


fs/afs/cmservice.c | 14 +++++++-
fs/afs/internal.h | 12 ++++++-
fs/afs/rxrpc.c | 74 ++++++-------------------------------------
include/net/af_rxrpc.h | 12 +++++--
include/trace/events/afs.h | 2 +
net/rxrpc/af_rxrpc.c | 37 +++-------------------
net/rxrpc/ar-internal.h | 5 +--
net/rxrpc/call_object.c | 3 +-
net/rxrpc/conn_client.c | 13 ++++++--
net/rxrpc/input.c | 1 -
net/rxrpc/sendmsg.c | 75 +++++++++++++++++++++++++++++++++-----------
11 files changed, 115 insertions(+), 133 deletions(-)