[PATCH 00/20] afs: Fixes and development

From: David Howells
Date: Thu Apr 05 2018 - 16:29:35 EST



Hi Linus,

Here are a set of AFS patches, a few fixes, but mostly development. The fixes
are:

(1) Fix a bunch of checker warnings.

(2) Fix overincrement of the usage count on pinned cells.

(3) Fix directory handling. We cannot assume that a directory blob isn't
completely rewritten between version numbers on the server, so we can't
mix pages from different versions in the local pagecache. If the
server's copy of a directory changes, we have to entirely throw out our
own copy and download afresh.

and the development patches:

(1) Implement the AFS @sys and @cell filename substitutions.

(2) Introduce a stats file, /proc/fs/afs/stats.

(3) Improve validation on dentries by keeping track of the last data version
we got from the server indicating changes not made locally since the
server inode was cached. If we made a local change to a directory with
no interference from another client, we don't need to invalidate all the
dentries.

(4) Locally edit our copy of a directory's contents when we make local
changes to it (eg. mkdir in it). This is fine, provided the server
indicates that the remote copy's data version increased by exactly 1. It
doesn't matter if the local data deviates from the remote data in exact
details, provided we flush the local one if we detect interference.

(5) Add tracepoints for protocol errors and directory editing.

(6) Do better aggregation of small disjointed writes (such as ld does) to a
locally newly created or truncated file when we write that to the server,
reducing the number of store ops at the expense of writing some of the
padding back too.

Note that this depends on the fscache-next-20180404 patchset already posted.

The patches are tagged here:

git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git
tags/afs-next-20180405

The patches can be found here also:

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

David
---
David Howells (20):
vfs: Remove the const from dir_context::actor
afs: Fix checker warnings
afs: Don't over-increment the cell usage count when pinning it
afs: Prospectively look up extra files when doing a single lookup
afs: Implement @sys substitution handling
afs: Implement @cell substitution handling
afs: Dump bad status record
afs: Introduce a statistics proc file
afs: Init inode before accessing cache
afs: Make it possible to get the data version in readpage
afs: Rearrange status mapping
afs: Keep track of invalid-before version for dentry coherency
afs: Split the dynroot stuff out and give it its own ops tables
afs: Fix directory handling
afs: Split the directory content defs into a header
afs: Adjust the directory XDR structures
afs: Locally edit directory data for mkdir/create/unlink/...
afs: Trace protocol errors
afs: Add stats for data transfer operations
afs: Do better accretion of small writes on newly created content


Documentation/filesystems/afs.txt | 28 +
fs/afs/Makefile | 2
fs/afs/addr_list.c | 6
fs/afs/afs.h | 27 +
fs/afs/afs_fs.h | 2
fs/afs/callback.c | 29 -
fs/afs/cell.c | 12
fs/afs/cmservice.c | 22 -
fs/afs/dir.c | 936 +++++++++++++++++++++++++------------
fs/afs/dir_edit.c | 505 ++++++++++++++++++++
fs/afs/dynroot.c | 216 +++++++++
fs/afs/file.c | 27 +
fs/afs/flock.c | 2
fs/afs/fsclient.c | 622 ++++++++++++++++++++-----
fs/afs/inode.c | 69 +--
fs/afs/internal.h | 102 +++-
fs/afs/main.c | 42 ++
fs/afs/proc.c | 306 ++++++++++++
fs/afs/rotate.c | 2
fs/afs/rxrpc.c | 9
fs/afs/security.c | 13 -
fs/afs/server.c | 14 -
fs/afs/super.c | 11
fs/afs/vlclient.c | 28 +
fs/afs/write.c | 41 +-
fs/afs/xdr_fs.h | 103 ++++
include/linux/fs.h | 2
include/trace/events/afs.h | 113 ++++
28 files changed, 2698 insertions(+), 593 deletions(-)
create mode 100644 fs/afs/dir_edit.c
create mode 100644 fs/afs/dynroot.c
create mode 100644 fs/afs/xdr_fs.h