deepin-kernel/fs/afs
David Howells 9118848806 afs: Fix the server_list to unuse a displaced server rather than putting it
[ Upstream commit add117e48d ]

When allocating and building an afs_server_list struct object from a VLDB
record, we look up each server address to get the server record for it -
but a server may have more than one entry in the record and we discard the
duplicate pointers.  Currently, however, when we discard, we only put a
server record, not unuse it - but the lookup got as an active-user count.

The active-user count on an afs_server_list object determines its lifetime
whereas the refcount keeps the memory backing it around.  Failing to reduce
the active-user counter prevents the record from being cleaned up and can
lead to multiple copied being seen - and pointing to deleted afs_cell
objects and other such things.

Fix this by switching the incorrect 'put' to an 'unuse' instead.

Without this, occasionally, a dead server record can be seen in
/proc/net/afs/servers and list corruption may be observed:

    list_del corruption. prev->next should be ffff888102423e40, but was 0000000000000000. (prev=ffff88810140cd38)

Fixes: 977e5f8ed0 ("afs: Split the usage count on struct afs_server")
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20250218192250.296870-5-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 51dc41111089956f565ed2ff5470f2461b058d64)
2025-03-17 20:08:50 +08:00
..
Kconfig afs: Convert afs to use the new fscache API 2022-01-07 13:44:47 +00:00
Makefile afs: Convert afs to use the new fscache API 2022-01-07 13:44:47 +00:00
addr_list.c
afs.h afs: Fix the maximum cell name length 2025-01-19 12:48:46 +08:00
afs_cm.h
afs_fs.h
afs_vl.h afs: Fix the maximum cell name length 2025-01-19 12:48:46 +08:00
callback.c afs: fix the usage of read_seqbegin_or_lock() in afs_lookup_volume_rcu() 2024-02-05 20:14:16 +00:00
cell.c afs: Make it possible to find the volumes that are using a server 2025-03-17 20:08:50 +08:00
cmservice.c rxrpc: Tidy up abort generation infrastructure 2023-01-06 09:43:32 +00:00
dir.c afs: Fix EEXIST error returned from afs_rmdir() to be ENOTEMPTY 2025-02-10 01:59:56 +08:00
dir_edit.c afs: Fix missing subdir edit when renamed between parent dirs 2024-12-10 20:43:30 +08:00
dir_silly.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
dynroot.c afs: Fix dynamic root lookup DNS check 2024-01-01 12:42:33 +00:00
file.c afs: fix __afs_break_callback() / afs_drop_open_mmap() race 2024-12-10 20:40:48 +08:00
flock.c fs: remove locks_inode 2023-01-11 06:52:43 -05:00
fs_operation.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-09 13:55:00 -07:00
fs_probe.c afs: Fix lost servers_outstanding count 2022-12-22 11:40:35 +00:00
fsclient.c afs: Use the operation issue time instead of the reply time for callbacks 2022-09-01 11:44:13 +01:00
inode.c fs: pass the request_mask to generic_fillattr 2023-08-09 08:56:36 +02:00
internal.h afs: Make it possible to find the volumes that are using a server 2025-03-17 20:08:50 +08:00
main.c afs: Convert afs to use the new fscache API 2022-01-07 13:44:47 +00:00
misc.c afs: Return -EAGAIN, not -EREMOTEIO, when a file already locked 2022-09-06 21:33:01 -04:00
mntpt.c afs: Don't cross .backup mountpoint from backup volume 2024-12-10 20:26:24 +08:00
proc.c afs: Use refcount_t rather than atomic_t 2022-08-02 18:10:11 +01: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
protocol_yfs.h afs: Fix corruption in reads at fpos 2G-4G from an OpenAFS server 2021-09-13 09:14:21 +01:00
rotate.c afs: Adjust ACK interpretation to try and cope with NAT 2022-05-22 21:03:02 +01:00
rxrpc.c afs: Fix cleanup of immediately failed async calls 2025-02-10 01:59:56 +08:00
security.c fs: port ->permission() to pass mnt_idmap 2023-01-19 09:24:28 +01:00
server.c afs: Make it possible to find the volumes that are using a server 2025-03-17 20:08:50 +08:00
server_list.c afs: Fix the server_list to unuse a displaced server rather than putting it 2025-03-17 20:08:50 +08:00
super.c afs: Fix file locking on R/O volumes to operate in local mode 2023-12-03 07:33:05 +01:00
vl_alias.c afs: Make it possible to find the volumes that are using a server 2025-03-17 20:08:50 +08:00
vl_list.c afs: Use refcount_t rather than atomic_t 2022-08-02 18:10:11 +01:00
vl_probe.c afs: Fix vlserver probe RTT handling 2023-06-16 14:43:41 -07:00
vl_rotate.c afs: Return ENOENT if no cell DNS record can be found 2023-12-03 07:33:05 +01:00
vlclient.c afs: Fix the maximum cell name length 2025-01-19 12:48:46 +08:00
volume.c afs: Make it possible to find the volumes that are using a server 2025-03-17 20:08:50 +08:00
write.c mm: page_ref: remove folio_try_get_rcu() 2024-12-10 20:39:33 +08:00
xattr.c fs: port xattr to mnt_idmap 2023-01-19 09:24:28 +01:00
xdr_fs.h afs: Fix directory format encoding struct 2025-02-10 01:59:56 +08:00
yfsclient.c afs: Fix the fallback handling for the YFS.RemoveFile2 RPC call 2025-02-10 01:59:56 +08:00