linux/fs/afs
David Howells 8230fd8217 afs: Make callback processing more efficient.
afs_vol_interest objects represent the volume IDs currently being accessed
from a fileserver.  These hold lists of afs_cb_interest objects that
repesent the superblocks using that volume ID on that server.

When a callback notification from the server telling of a modification by
another client arrives, the volume ID specified in the notification is
looked up in the server's afs_vol_interest list.  Through the
afs_cb_interest list, the relevant superblocks can be iterated over and the
specific inode looked up and marked in each one.

Make the following efficiency improvements:

 (1) Hold rcu_read_lock() over the entire processing rather than locking it
     each time.

 (2) Do all the callbacks for each vid together rather than individually.
     Each volume then only needs to be looked up once.

 (3) afs_vol_interest objects are now stored in an rb_tree rather than a
     flat list to reduce the lookup step count.

 (4) afs_vol_interest lookup is now done with RCU, but because it's in an
     rb_tree which may rotate under us, a seqlock is used so that if it
     changes during the walk, we repeat the walk with a lock held.

With this and the preceding patch which adds RCU-based lookups in the inode
cache, target volumes/vnodes can be taken without the need to take any
locks, except on the target itself.

Signed-off-by: David Howells <dhowells@redhat.com>
2020-05-31 15:19:51 +01:00
..
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile afs: do not send list of client addresses 2019-06-02 18:06:26 -07:00
addr_list.c afs: Use kfree_rcu() instead of casting kfree() to rcu_callback_t 2020-03-13 10:47:33 -07:00
afs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
afs_cm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
afs_fs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
afs_vl.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cache.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
callback.c afs: Make callback processing more efficient. 2020-05-31 15:19:51 +01:00
cell.c afs: Fix characters allowed into cell names 2020-01-26 08:54:04 -08:00
cmservice.c afs: Actively poll fileservers to maintain NAT or firewall openings 2020-05-31 15:19:51 +01:00
dir.c afs: Always include dir in bulk status fetch from afs_do_lookup() 2020-05-31 15:19:51 +01:00
dir_edit.c afs: Remove set but not used variables 'before', 'after' 2019-11-21 20:36:00 +00:00
dir_silly.c afs: Fix race between post-modification dir edit and readdir/d_revalidate 2020-04-13 15:09:01 +01:00
dynroot.c afs: Fix creation calls in the dynamic root to fail with EOPNOTSUPP 2019-12-11 17:47:51 +00:00
file.c afs: Rename desc -> req in afs_fetch_data() 2019-11-21 09:12:17 +00:00
flock.c fs: afs: Use pr_warn instead of pr_warning 2019-10-18 15:01:55 +02:00
fs_probe.c afs: Actively poll fileservers to maintain NAT or firewall openings 2020-05-31 15:19:51 +01:00
fsclient.c afs: Actively poll fileservers to maintain NAT or firewall openings 2020-05-31 15:19:51 +01:00
inode.c Printk changes for 5.5 2019-11-25 19:40:40 -08:00
internal.h afs: Make callback processing more efficient. 2020-05-31 15:19:51 +01:00
main.c afs: Actively poll fileservers to maintain NAT or firewall openings 2020-05-31 15:19:51 +01:00
misc.c AFS development 2019-07-10 20:55:33 -07:00
mntpt.c afs: Fix mountpoint parsing 2019-12-11 16:56:54 +00:00
proc.c afs: Show more information in /proc/net/afs/servers 2020-05-31 15:19:51 +01:00
protocol_uae.h afs: Add support for the UAE error table 2019-06-28 18:37:53 +01:00
protocol_yfs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
rotate.c afs: Actively poll fileservers to maintain NAT or firewall openings 2020-05-31 15:19:51 +01:00
rxrpc.c afs: Split the usage count on struct afs_server 2020-05-31 15:19:51 +01:00
security.c afs: Support RCU pathwalk 2019-09-02 11:43:54 +01:00
server.c afs: Make callback processing more efficient. 2020-05-31 15:19:51 +01:00
server_list.c afs: Split the usage count on struct afs_server 2020-05-31 15:19:51 +01:00
super.c fs_parse: fold fs_parameter_desc/fs_parameter_spec 2020-02-07 14:48:37 -05:00
vl_list.c fs/afs: Replace rcu_swap_protected() with rcu_replace_pointer() 2019-10-30 08:44:27 -07:00
vl_probe.c rxrpc: Fix the excessive initial retransmission timeout 2020-05-11 16:42:28 +01:00
vl_rotate.c afs: Remove some unused bits 2020-04-24 16:32:49 +01:00
vlclient.c afs: Use the serverUnique field in the UVLDB record to reduce rpc ops 2020-05-31 15:19:51 +01:00
volume.c afs: Actively poll fileservers to maintain NAT or firewall openings 2020-05-31 15:19:51 +01:00
write.c AFS development 2019-07-10 20:55:33 -07:00
xattr.c afs: xattr: use scnprintf 2019-11-21 09:12:17 +00:00
xdr_fs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00
yfsclient.c afs: Don't unlock fetched data pages until the op completes successfully 2020-05-18 10:29:17 -07:00