kernel_optimize_test/fs/afs
David Howells 47ea0f2ebf afs: Optimise callback breaking by not repeating volume lookup
At the moment, afs_break_callbacks calls afs_break_one_callback() for each
separate FID it was given, and the latter looks up the volume individually
for each one.

However, this is inefficient if two or more FIDs have the same vid as we
could reuse the volume.  This is complicated by cell aliasing whereby we
may have multiple cells sharing a volume and can therefore have multiple
callback interests for any particular volume ID.

At the moment afs_break_one_callback() scans the entire list of volumes
we're getting from a server and breaks the appropriate callback in every
matching volume, regardless of cell.  This scan is done for every FID.

Optimise callback breaking by the following means:

 (1) Sort the FID list by vid so that all FIDs belonging to the same volume
     are clumped together.

     This is done through the use of an indirection table as we cannot do
     an insertion sort on the afs_callback_break array as we decode FIDs
     into it as we subsequently also have to decode callback info into it
     that corresponds by array index only.

     We also don't really want to bubblesort afterwards if we can avoid it.

 (2) Sort the server->cb_interests array by vid so that all the matching
     volumes are grouped together.  This permits the scan to stop after
     finding a record that has a higher vid.

 (3) When breaking FIDs, we try to keep server->cb_break_lock as long as
     possible, caching the start point in the array for that volume group
     as long as possible.

     It might make sense to add another layer in that list and have a
     refcounted volume ID anchor that has the matching interests attached
     to it rather than being in the list.  This would allow the lock to be
     dropped without losing the cursor.

Signed-off-by: David Howells <dhowells@redhat.com>
2018-06-15 15:27:09 +01:00
..
addr_list.c afs: Enable IPv6 DNS lookups 2018-06-15 15:27:09 +01:00
afs_cm.h
afs_fs.h afs: Prospectively look up extra files when doing a single lookup 2018-04-09 21:12:31 +01:00
afs_vl.h afs: Make use of the YFS service upgrade to fully support IPv6 2017-11-13 15:38:19 +00:00
afs.h afs: Rearrange status mapping 2018-04-09 21:53:59 +01:00
cache.c fscache: Pass object size in rather than calling back for it 2018-04-06 14:05:14 +01:00
callback.c afs: Optimise callback breaking by not repeating volume lookup 2018-06-15 15:27:09 +01:00
cell.c afs: Display manually added cells in dynamic root mount 2018-06-15 15:27:09 +01:00
cmservice.c AFS fixes 2018-06-02 18:09:27 -04:00
dir_edit.c afs: Locally edit directory data for mkdir/create/unlink/... 2018-04-09 21:54:48 +01:00
dir.c afs: Fix whole-volume callback handling 2018-05-14 15:15:18 +01:00
dynroot.c afs: Display manually added cells in dynamic root mount 2018-06-15 15:27:09 +01:00
file.c afs: Fix whole-volume callback handling 2018-05-14 15:15:18 +01:00
flock.c afs: Fix whole-volume callback handling 2018-05-14 15:15:18 +01:00
fsclient.c AFS fixes 2018-06-02 18:09:27 -04:00
inode.c afs: Fix whole-volume callback handling 2018-05-14 15:15:18 +01:00
internal.h afs: Optimise callback breaking by not repeating volume lookup 2018-06-15 15:27:09 +01:00
Kconfig
main.c afs: Display manually added cells in dynamic root mount 2018-06-15 15:27:09 +01:00
Makefile afs: Handle CONFIG_PROC_FS=n 2018-06-15 00:52:55 -04:00
misc.c afs: Consolidate abort_to_error translators 2017-11-13 15:38:17 +00:00
mntpt.c afs: Support the AFS dynamic root 2018-02-06 14:43:37 +00:00
netdevices.c afs: Implement network namespacing 2018-05-23 12:01:15 +01:00
proc.c afs: Show all of a server's addresses in /proc/fs/afs/servers 2018-06-15 00:52:59 -04:00
rotate.c afs: Fix VNOVOL handling in address rotation 2018-05-14 15:15:18 +01:00
rxrpc.c AFS fixes 2018-06-02 18:09:27 -04:00
security.c afs: Fix whole-volume callback handling 2018-05-14 15:15:18 +01:00
server_list.c afs: Fix refcounting in callback registration 2018-05-14 13:17:35 +01:00
server.c afs: Optimise callback breaking by not repeating volume lookup 2018-06-15 15:27:09 +01:00
super.c afs: Display manually added cells in dynamic root mount 2018-06-15 15:27:09 +01:00
vlclient.c afs: Trace protocol errors 2018-04-09 21:54:48 +01:00
volume.c fscache: Pass object size in rather than calling back for it 2018-04-06 14:05:14 +01:00
write.c afs: Fix whole-volume callback handling 2018-05-14 15:15:18 +01:00
xattr.c afs: Overhaul volume and server record caching and fileserver rotation 2017-11-13 15:38:19 +00:00
xdr_fs.h afs: Adjust the directory XDR structures 2018-04-09 21:54:48 +01:00