linux/fs/afs
David Howells 41376400c4
netfs: Replace wb_lock with a bit lock for asynchronicity
The netfs_inode::wb_lock mutex is used to prevent multiple simultaneous
writebacks from fighting each other (a writeback thread will write multiple
discontiguous regions within the same request).  The mutex, however, only
serialises the issuing of subrequests; it doesn't serialise the collection
of results, and, in particular, the updating of file size information and
fscache populatedness data.

Unfortunately, the mutex cannot be held around the entire process as it has
to be unlocked in the same thread in which it is locked - and we don't want
to hold up the allocator whilst we complete the writeback.

Fix this by replacing the mutex with a bit flag and a list of lock waiters
so that the lock can be dropped in the collector thread after collection is
complete.

Link: https://sashiko.dev/#/patchset/20260608145432.681865-1-dhowells%40redhat.com
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://patch.msgid.link/20260625140640.3116900-12-dhowells@redhat.com
cc: Paulo Alcantara <pc@manguebit.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
2026-07-01 15:26:29 +02:00
..
addr_list.c rxrpc, afs: Fix missing error pointer check after rxrpc_kernel_lookup_peer() 2026-03-06 17:49:52 -08:00
addr_prefs.c Convert 'alloc_flex' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08: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 afs: Fix the maximum cell name length 2025-01-07 15:55:25 +01:00
afs.h afs: Fix the maximum cell name length 2025-01-07 15:55:25 +01:00
callback.c afs: Fix leak of ungot volume 2026-07-01 15:26:21 +02:00
cell.c afs: Fix premature cell exposure through /afs 2026-07-01 15:26:22 +02:00
cm_security.c afs: Fix uncancelled rxrpc OOB message handler 2026-06-25 10:07:18 -07:00
cmservice.c afs: Fix callback service message parsers to pass through -EAGAIN 2026-07-01 15:26:20 +02:00
dir_edit.c Simplifying ->d_name audits, easy part. 2025-10-03 11:14:02 -07:00
dir_search.c treewide: change inode->i_ino from unsigned long to u64 2026-03-06 14:31:28 +01:00
dir_silly.c VFS: use wait_var_event for waiting in d_alloc_parallel() 2026-06-05 00:34:54 -04:00
dir.c afs: Fix bulk lookup malfunction due to change in dir_emit() API 2026-07-01 15:26:20 +02:00
dynroot.c afs: Fix lack of locking around modifications of net->cells_dyn_ino 2026-07-01 15:26:21 +02:00
file.c netfs: Fix potential for tearing in ->remote_i_size and ->zero_point 2026-05-12 14:42:30 +02:00
flock.c afs: adapt to breakup of struct file_lock 2024-02-05 13:11:42 +01:00
fs_operation.c afs: use kvfree() to free memory allocated by kvcalloc() 2026-07-01 15:26:19 +02:00
fs_probe.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
fsclient.c afs: Fix the locking used by afs_get_link() 2026-05-12 14:42:33 +02:00
inode.c afs: Fix reinitialisation of the inode, in particular ->lock_work 2026-07-01 15:26:20 +02:00
internal.h afs: Fix premature cell exposure through /afs 2026-07-01 15:26:22 +02:00
Kconfig afs: Use rxgk RESPONSE to pass token for callback channel 2025-04-14 17:36:42 -07:00
main.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
Makefile afs: Fix the locking used by afs_get_link() 2026-05-12 14:42:33 +02:00
misc.c afs: Add support for RENAME_NOREPLACE and RENAME_EXCHANGE 2025-09-25 09:19:07 +02:00
mntpt.c afs: Fix dynamic lookup to fail on cell lookup failure 2025-10-29 13:51:38 +01:00
proc.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
protocol_afs.h afs: Fix corruption in reads at fpos 2G-4G from an OpenAFS server 2021-09-13 09:14:21 +01:00
protocol_uae.h afs: Add support for the UAE error table 2019-06-28 18:37:53 +01:00
protocol_yfs.h afs: Add support for RENAME_NOREPLACE and RENAME_EXCHANGE 2025-09-25 09:19:07 +02:00
rotate.c Convert remaining multi-line kmalloc_obj/flex GFP_KERNEL uses 2026-02-22 08:26:33 -08:00
rxrpc.c afs: Fix uncancelled rxrpc OOB message handler 2026-06-25 10:07:18 -07:00
security.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
server_list.c Convert 'alloc_flex' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
server.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
super.c afs: Fix reinitialisation of the inode, in particular ->lock_work 2026-07-01 15:26:20 +02:00
symlink.c netfs: Replace wb_lock with a bit lock for asynchronicity 2026-07-01 15:26:29 +02:00
validation.c afs: Fix the locking used by afs_get_link() 2026-05-12 14:42:33 +02:00
vl_alias.c afs: Fix dynamic lookup to fail on cell lookup failure 2025-10-29 13:51:38 +01:00
vl_list.c afs: Fix unchecked-length string display in debug statement 2026-07-01 15:26:22 +02:00
vl_probe.c afs: Keep a record of the current fileserver endpoint state 2024-01-01 16:37:27 +00:00
vl_rotate.c afs: Simplify cell record handling 2025-03-10 09:47:15 +00:00
vlclient.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
volume.c afs: Fix the volume AFS_VOLUME_RM_TREE is set on 2026-07-01 15:26:22 +02:00
write.c netfs: Fix potential for tearing in ->remote_i_size and ->zero_point 2026-05-12 14:42:30 +02:00
xattr.c Convert 'alloc_flex' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
xdr_fs.h afs: Fix directory format encoding struct 2024-12-20 22:34:04 +01:00
yfsclient.c afs: Fix the locking used by afs_get_link() 2026-05-12 14:42:33 +02:00