kernel_samsung_a53x/fs/nfsd
Chuck Lever f65a30361a NFSD: Leave open files out of the filecache LRU
[ Upstream commit 4a0e73e635e3f36b616ad5c943e3d23debe4632f ]

There have been reports of problems when running fstests generic/531
against Linux NFS servers with NFSv4. The NFS server that hosts the
test's SCRATCH_DEV suffers from CPU soft lock-ups during the test.
Analysis shows that:

fs/nfsd/filecache.c
 482                 ret = list_lru_walk(&nfsd_file_lru,
 483                                 nfsd_file_lru_cb,
 484                                 &head, LONG_MAX);

causes nfsd_file_gc() to walk the entire length of the filecache LRU
list every time it is called (which is quite frequently). The walk
holds a spinlock the entire time that prevents other nfsd threads
from accessing the filecache.

What's more, for NFSv4 workloads, none of the items that are visited
during this walk may be evicted, since they are all files that are
held OPEN by NFS clients.

Address this by ensuring that open files are not kept on the LRU
list.

Reported-by: Frank van der Linden <fllinden@amazon.com>
Reported-by: Wang Yugui <wangyugui@e16-tech.com>
Link: https://bugzilla.linux-nfs.org/show_bug.cgi?id=386
Suggested-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-19 12:28:00 +01:00
..
acl.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
auth.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
auth.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
blocklayout.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
blocklayoutxdr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
blocklayoutxdr.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cache.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
current_stateid.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
export.c nfsd: report per-export stats 2024-11-19 12:27:31 +01:00
export.h nfsd: report per-export stats 2024-11-19 12:27:31 +01:00
fault_inject.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
filecache.c NFSD: Leave open files out of the filecache LRU 2024-11-19 12:28:00 +01:00
filecache.h NFSD: Report average age of filecache items 2024-11-19 12:28:00 +01:00
flexfilelayout.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
flexfilelayoutxdr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
flexfilelayoutxdr.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idmap.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig NFSD: Remove CONFIG_NFSD_V3 2024-11-19 12:27:54 +01:00
lockd.c Keep read and write fds with each nlm_file 2024-11-19 12:27:44 +01:00
Makefile NFSD: Remove CONFIG_NFSD_V3 2024-11-19 12:27:54 +01:00
netns.h NFSD: Rename boot verifier functions 2024-11-19 12:27:52 +01:00
nfs2acl.c SUNRPC: Return true/false (not 1/0) from bool functions 2024-11-19 12:27:54 +01:00
nfs3acl.c SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
nfs3proc.c NFSD: Refactor NFSv3 CREATE 2024-11-19 12:27:57 +01:00
nfs3xdr.c NFSD: Deprecate NFS_OFFSET_MAX 2024-11-19 12:27:53 +01:00
nfs4acl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nfs4callback.c nfsd: rpc_peeraddr2str needs rcu lock 2024-11-19 12:27:39 +01:00
nfs4idmap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nfs4layouts.c nfsd: fix using the correct variable for sizeof() 2024-11-19 12:27:54 +01:00
nfs4proc.c NFSD: Demote a WARN to a pr_warn() 2024-11-19 12:27:59 +01:00
nfs4recover.c nfsd: Log client tracking type log message as info instead of warning 2024-11-19 12:27:36 +01:00
nfs4state.c NFSD: Add documenting comment for nfsd4_release_lockowner() 2024-11-19 12:27:58 +01:00
nfs4xdr.c NFSD: Decode NFSv4 birth time attribute 2024-11-19 12:27:59 +01:00
nfscache.c nfsd: destroy percpu stats counters after reply cache shutdown 2024-11-19 12:27:58 +01:00
nfsctl.c NFSD: Hook up the filecache stat file 2024-11-19 12:28:00 +01:00
nfsd.h NFSD: Decode NFSv4 birth time attribute 2024-11-19 12:27:59 +01:00
nfsfh.c NFSD: Remove CONFIG_NFSD_V3 2024-11-19 12:27:54 +01:00
nfsfh.h NFSD: Remove CONFIG_NFSD_V3 2024-11-19 12:27:54 +01:00
nfsproc.c nfsd: Retry once in nfsd_open on an -EOPENSTALE return 2024-11-19 12:27:52 +01:00
nfssvc.c NFSD: Remove CONFIG_NFSD_V3 2024-11-19 12:27:54 +01:00
nfsxdr.c SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
pnfs.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
state.h NFSD: add courteous server support for thread with only delegation 2024-11-19 12:27:56 +01:00
stats.c nfsd: make nfsd_stats.th_cnt atomic_t 2024-11-19 12:27:50 +01:00
stats.h nfsd: make nfsd_stats.th_cnt atomic_t 2024-11-19 12:27:50 +01:00
trace.c NFSD: Add SPDX header for fs/nfsd/trace.c 2024-11-19 12:27:20 +01:00
trace.h NFSD: Leave open files out of the filecache LRU 2024-11-19 12:28:00 +01:00
vfs.c NFSD: Clean up nfsd_open_verified() 2024-11-19 12:27:57 +01:00
vfs.h NFSD: Clean up nfsd_open_verified() 2024-11-19 12:27:57 +01:00
xdr.h SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
xdr3.h SUNRPC: Change return value type of .pc_encode 2024-11-19 12:27:48 +01:00
xdr4.h NFSD: Instantiate a struct file when creating a regular NFSv4 file 2024-11-19 12:27:57 +01:00
xdr4cb.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00