linux/fs/nfs
NeilBrown 14e6bab373 NFS: swap-out must always use STABLE writes.
[ Upstream commit c265de257f558a05c1859ee9e3fed04883b9ec0e ]

The commit handling code is not safe against memory-pressure deadlocks
when writing to swap.  In particular, nfs_commitdata_alloc() blocks
indefinitely waiting for memory, and this can consume all available
workqueue threads.

swap-out most likely uses STABLE writes anyway as COND_STABLE indicates
that a stable write should be used if the write fits in a single
request, and it normally does.  However if we ever swap with a small
wsize, or gather unusually large numbers of pages for a single write,
this might change.

For safety, make it explicit in the code that direct writes used for swap
must always use FLUSH_STABLE.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-04-15 14:18:36 +02:00
..
blocklayout
filelayout NFS: fix an incorrect limit in filelayout_decode_layout() 2021-06-03 08:59:06 +02:00
flexfilelayout pnfs/flexfiles: Fix misplaced barrier in nfs4_ff_layout_prepare_ds 2021-11-17 09:48:44 +01:00
Kconfig nfs: fix PNFS_FLEXFILE_LAYOUT Kconfig default 2021-03-30 14:35:21 +02:00
Makefile
cache_lib.c
cache_lib.h
callback.c
callback.h NFSv4.1: Fix uninitialised variable in devicenotify 2022-02-16 12:52:48 +01:00
callback_proc.c NFSv4/pNFS: Fix another issue with a list iterator pointing to the head 2022-04-15 14:18:21 +02:00
callback_xdr.c NFS: remove unneeded check in decode_devicenotify_args() 2022-04-15 14:18:19 +02:00
client.c NFS: Fix initialisation of nfs_client cl_flags field 2022-02-16 12:52:47 +01:00
delegation.c
delegation.h
dir.c NFS: LOOKUP_DIRECTORY is also ok with symlinks 2022-02-23 11:59:59 +01:00
direct.c NFS: swap-out must always use STABLE writes. 2022-04-15 14:18:36 +02:00
dns_resolve.c
dns_resolve.h
export.c
file.c NFS: swap IO handling is slightly different for O_DIRECT IO 2022-04-15 14:18:35 +02:00
fscache-index.c
fscache.c
fscache.h
getroot.c
inode.c NFS: Do not report writeback errors in nfs_getattr() 2022-02-23 11:59:59 +01:00
internal.h
io.c
iostat.h
mount_clnt.c
namespace.c
netns.h
nfs.h
nfs2super.c
nfs2xdr.c NFS: Return valid errors from nfs2/3_decode_dirent() 2022-04-15 14:18:18 +02:00
nfs3_fs.h
nfs3acl.c
nfs3client.c
nfs3proc.c nfs: fix acl memory leak of posix_acl_create() 2021-07-20 16:10:49 +02:00
nfs3super.c
nfs3xdr.c NFS: Return valid errors from nfs2/3_decode_dirent() 2022-04-15 14:18:18 +02:00
nfs4_fs.h NFSv4 expose nfs_parse_server_name function 2022-02-16 12:52:48 +01:00
nfs4client.c nfs: nfs4clinet: check the return value of kstrdup() 2022-02-16 12:52:48 +01:00
nfs4file.c NFSv4: Fix v4.0/v4.1 SEEK_DATA return -ENOTSUPP when set NFS_V4_2 config 2021-06-03 08:59:06 +02:00
nfs4getroot.c
nfs4idmap.c
nfs4idmap.h
nfs4namespace.c NFSv4 expose nfs_parse_server_name function 2022-02-16 12:52:48 +01:00
nfs4proc.c NFSv4.1: don't retry BIND_CONN_TO_SESSION on session error 2022-04-15 14:18:20 +02:00
nfs4renewd.c
nfs4session.c
nfs4session.h
nfs4state.c NFSv4: Protect the state recovery thread against direct reclaim 2022-04-15 14:18:35 +02:00
nfs4super.c
nfs4sysctl.c
nfs4trace.c
nfs4trace.h
nfs4xdr.c NFSv4 remove zero number of fs_locations entries error check 2022-02-16 12:52:48 +01:00
nfs42.h
nfs42proc.c NFSv42: Fix pagecache invalidation after COPY/CLONE 2021-12-08 09:01:08 +01:00
nfs42xdr.c NFSv42: Don't fail clone() unless the OP_CLONE operation failed 2021-12-01 09:23:32 +01:00
nfsroot.c
nfstrace.c
nfstrace.h
pagelist.c NFS: Don't corrupt the value of pg_bytes_written in nfs_do_recoalesce() 2021-06-03 08:59:06 +02:00
pnfs.c NFSv4/pNFS: Fix another issue with a list iterator pointing to the head 2022-04-15 14:18:21 +02:00
pnfs.h NFSv4/pNFS: Fix another issue with a list iterator pointing to the head 2022-04-15 14:18:21 +02:00
pnfs_dev.c
pnfs_nfs.c pnfs/flexfiles: Fix misplaced barrier in nfs4_ff_layout_prepare_ds 2021-11-17 09:48:44 +01:00
proc.c
read.c
super.c
symlink.c
sysctl.c
sysfs.c
sysfs.h
unlink.c
write.c NFS: Fix deadlocks in nfs_scan_commit_list() 2021-11-17 09:48:45 +01:00