[GIT PULL] afs: Miscellaneous fixes

From: David Howells
Date: Thu May 16 2019 - 19:02:37 EST


Hi Linus,

Could you pull this series please? It fixes a set of miscellaneous issues
in the afs filesystem, including:

(1) Leak of keys on file close.

(2) Broken error handling in xattr functions.

(3) Missing locking when updating VL server list.

(4) Volume location server DNS lookup whereby preloaded cells may not ever
get a lookup and regular DNS lookups to maintain server lists consume
power unnecessarily.

(5) Incorrect error propagation and handling in the fileserver iteration
code causes operations to sometimes apparently succeed.

(6) Interruption of server record check/update side op during fileserver
iteration causes uninterruptible main operations to fail unexpectedly.

(7) Callback promise expiry time miscalculation.

(8) Over invalidation of the callback promise on directories.

(9) Double locking on callback break waking up file locking waiters.

(10) Double increment of the vnode callback break counter.

Note that it makes some changes outside of the afs code, including:

(A) Adding an extra parameter to dns_query() to allow the dns_resolver key
just accessed to be immediately invalidated. AFS is caching the
results itself, so the key can be discarded.

(B) Adding an interruptible version of wait_var_event().

(C) Adding an rxrpc function to allow the maximum lifespan to be set on a
call.

(D) Adding a way for an rxrpc call to be marked as non-interruptible.

Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
Tested-by: Marc Dionne <marc.dionne@xxxxxxxxxxxx>
---
The following changes since commit 80f232121b69cc69a31ccb2b38c1665d770b0710:

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next (2019-05-07 22:03:58 -0700)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git tags/afs-fixes-20190516

for you to fetch changes up to fd711586bb7d63f257da5eff234e68c446ac35ea:

afs: Fix double inc of vnode->cb_break (2019-05-16 16:25:21 +0100)

----------------------------------------------------------------
AFS fixes

----------------------------------------------------------------
David Howells (19):
afs: Fix key leak in afs_release() and afs_evict_inode()
afs: Fix incorrect error handling in afs_xattr_get_acl()
afs: Fix afs_xattr_get_yfs() to not try freeing an error value
afs: Fix missing lock when replacing VL server list
afs: Fix afs_cell records to always have a VL server list record
dns_resolver: Allow used keys to be invalidated
Add wait_var_event_interruptible()
afs: Fix cell DNS lookup
afs: Fix "kAFS: AFS vnode with undefined type 0"
rxrpc: Provide kernel interface to set max lifespan on a call
afs: Fix the maximum lifespan of VL and probe calls
afs: Fix error propagation from server record check/update
rxrpc: Allow the kernel to mark a call as being non-interruptible
afs: Make some RPC operations non-interruptible
afs: Make dynamic root population wait uninterruptibly for proc_cells_lock
afs: Fix calculation of callback expiry time
afs: Don't invalidate callback if AFS_VNODE_DIR_VALID not set
afs: Fix lock-wait/callback-break double locking
afs: Fix double inc of vnode->cb_break

Documentation/networking/rxrpc.txt | 21 ++++-
fs/afs/addr_list.c | 2 +-
fs/afs/afs.h | 3 +
fs/afs/callback.c | 8 +-
fs/afs/cell.c | 187 ++++++++++++++++++++++---------------
fs/afs/dir.c | 18 ++--
fs/afs/dir_silly.c | 4 +-
fs/afs/dynroot.c | 5 +-
fs/afs/file.c | 9 +-
fs/afs/flock.c | 9 +-
fs/afs/fsclient.c | 77 +++++++++------
fs/afs/inode.c | 12 +--
fs/afs/internal.h | 22 +++--
fs/afs/proc.c | 8 +-
fs/afs/rotate.c | 29 ++++--
fs/afs/rxrpc.c | 7 +-
fs/afs/security.c | 4 +-
fs/afs/server.c | 17 +++-
fs/afs/super.c | 2 +-
fs/afs/vl_list.c | 20 ++--
fs/afs/vl_rotate.c | 28 +++++-
fs/afs/vlclient.c | 4 +
fs/afs/write.c | 2 +-
fs/afs/xattr.c | 103 ++++++++++----------
fs/afs/yfsclient.c | 98 +++++++++----------
fs/cifs/dns_resolve.c | 2 +-
fs/nfs/dns_resolve.c | 2 +-
include/linux/dns_resolver.h | 3 +-
include/linux/wait_bit.h | 13 +++
include/net/af_rxrpc.h | 3 +
net/ceph/messenger.c | 2 +-
net/dns_resolver/dns_query.c | 6 +-
net/rxrpc/af_rxrpc.c | 28 ++++++
net/rxrpc/ar-internal.h | 2 +
net/rxrpc/call_object.c | 2 +
net/rxrpc/conn_client.c | 8 +-
net/rxrpc/sendmsg.c | 4 +-
37 files changed, 478 insertions(+), 296 deletions(-)