linux/fs/nfs
NeilBrown 8db55a032a SUNRPC: improve 'swap' handling: scheduling and PF_MEMALLOC
rpc tasks can be marked as RPC_TASK_SWAPPER.  This causes GFP_MEMALLOC
to be used for some allocations.  This is needed in some cases, but not
in all where it is currently provided, and in some where it isn't
provided.

Currently *all* tasks associated with a rpc_client on which swap is
enabled get the flag and hence some GFP_MEMALLOC support.

GFP_MEMALLOC is provided for ->buf_alloc() but only swap-writes need it.
However xdr_alloc_bvec does not get GFP_MEMALLOC - though it often does
need it.

xdr_alloc_bvec is called while the XPRT_LOCK is held.  If this blocks,
then it blocks all other queued tasks.  So this allocation needs
GFP_MEMALLOC for *all* requests, not just writes, when the xprt is used
for any swap writes.

Similarly, if the transport is not connected, that will block all
requests including swap writes, so memory allocations should get
GFP_MEMALLOC if swap writes are possible.

So with this patch:
 1/ we ONLY set RPC_TASK_SWAPPER for swap writes.
 2/ __rpc_execute() sets PF_MEMALLOC while handling any task
    with RPC_TASK_SWAPPER set, or when handling any task that
    holds the XPRT_LOCKED lock on an xprt used for swap.
    This removes the need for the RPC_IS_SWAPPER() test
    in ->buf_alloc handlers.
 3/ xprt_prepare_transmit() sets PF_MEMALLOC after locking
    any task to a swapper xprt.  __rpc_execute() will clear it.
 3/ PF_MEMALLOC is set for all the connect workers.

Reviewed-by: Chuck Lever <chuck.lever@oracle.com> (for xprtrdma parts)
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
2022-03-13 12:59:35 -04:00
..
blocklayout nfs/blocklayout: use bdev_nr_bytes instead of open coding it 2021-10-18 14:43:23 -06:00
filelayout nfs41: pnfs: filelayout: Replace one-element array with flexible-array member 2022-01-06 14:00:20 -05:00
flexfilelayout NFSv4/flexfiles: Convert GFP_NOFS to GFP_KERNEL 2022-02-25 18:50:12 -05:00
cache_lib.c
cache_lib.h
callback_proc.c NFSv4.2/copyoffload: Convert GFP_NOFS to GFP_KERNEL 2022-02-25 18:50:12 -05:00
callback_xdr.c NFS: remove unneeded check in decode_devicenotify_args() 2022-03-13 12:59:34 -04:00
callback.c Merge branch 'signal-for-v5.17' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2022-01-17 05:49:30 +02:00
callback.h NFSv4.1: Fix uninitialised variable in devicenotify 2022-01-06 14:00:20 -05:00
client.c NFS: Fix initialisation of nfs_client cl_flags field 2022-02-08 09:13:49 -05:00
delegation.c NFSv4: Charge NFSv4 open state trackers to kmemcg 2022-02-25 18:50:12 -05:00
delegation.h NFSv4: Fix delegation return in cases where we have to retry 2021-06-13 19:36:27 -04:00
dir.c NFS: Cache all entries in the readdirplus reply 2022-03-02 08:43:39 -05:00
direct.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
dns_resolve.c
dns_resolve.h
export.c nfs: block notification on fs with its own ->lock 2022-01-08 14:42:01 -05:00
file.c NFS: remove IS_SWAPFILE hack 2022-03-13 12:59:35 -04:00
fs_context.c net: Don't include filter.h from net/sock.h 2021-12-29 08:48:14 -08:00
fscache.c NFS: Remove remaining dfprintks related to fscache and remove NFSDBG_FSCACHE 2022-03-13 12:59:35 -04:00
fscache.h NFS: Rename fscache read and write pages functions 2022-03-13 12:59:35 -04:00
getroot.c NFS: Remove the nfs4_label argument from nfs_setsecurity 2021-11-05 14:54:40 -04:00
inode.c NFS: Don't ask for readdirplus unless it can help nfs_getattr() 2022-03-02 08:43:38 -05:00
internal.h NFS: Improve heuristic for readdirplus 2022-03-02 08:43:38 -05:00
io.c NFS: Fix up incorrect documentation 2021-04-05 09:04:20 -04:00
iostat.h
Kconfig NFS: Convert readdir page cache to use a cookie based index 2022-03-02 08:43:39 -05:00
Makefile nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
mount_clnt.c nfs: hornor timeo and retrans option when mounting NFSv3 2021-04-05 09:04:21 -04:00
namespace.c NFS: Remove the label from the nfs4_lookup_res struct 2021-11-05 14:54:39 -04:00
netns.h
nfs2super.c
nfs2xdr.c NFS: Optimise away the previous cookie field 2022-03-02 08:43:39 -05:00
nfs3_fs.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
nfs3acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
nfs3client.c
nfs3proc.c NFS: pass cred explicitly for access tests 2022-01-06 14:00:20 -05:00
nfs3super.c
nfs3xdr.c NFS: Optimise away the previous cookie field 2022-03-02 08:43:39 -05:00
nfs4_fs.h NFSv4 handle port presence in fs_location server string 2022-01-13 09:36:58 -05:00
nfs4client.c nfs: nfs4clinet: check the return value of kstrdup() 2022-01-06 14:00:20 -05:00
nfs4file.c NFSv4.2/copyoffload: Convert GFP_NOFS to GFP_KERNEL 2022-02-25 18:50:12 -05:00
nfs4getroot.c
nfs4idmap.c Fix user namespace leak 2021-10-20 18:09:54 -04:00
nfs4idmap.h
nfs4namespace.c NFSv4 handle port presence in fs_location server string 2022-01-13 09:36:58 -05:00
nfs4proc.c NFSv4.1 restrict GETATTR fs_location query to the main transport 2022-03-13 12:59:34 -04:00
nfs4renewd.c treewide: remove editor modelines and cruft 2021-05-07 00:26:34 -07:00
nfs4session.c NFSv4: Sanity check the parameters in nfs41_update_target_slotid() 2021-11-07 09:23:14 -05:00
nfs4session.h NFSv4: Sanity check the parameters in nfs41_update_target_slotid() 2021-11-07 09:23:14 -05:00
nfs4state.c NFS: Convert GFP_NOFS to GFP_KERNEL 2022-02-25 18:50:12 -05:00
nfs4super.c NFS: Adjust fs_context error logging 2021-01-10 13:32:39 -05:00
nfs4sysctl.c
nfs4trace.c
nfs4trace.h NFSv4.2 add tracepoint to OFFLOAD_CANCEL 2021-11-04 19:43:30 -04:00
nfs4xdr.c NFS: Optimise away the previous cookie field 2022-03-02 08:43:39 -05:00
nfs42.h NFSv4.2: add the extended attribute proc functions. 2020-07-13 17:52:45 -04:00
nfs42proc.c NFSv4.2/copyoffload: Convert GFP_NOFS to GFP_KERNEL 2022-02-25 18:50:12 -05:00
nfs42xattr.c NFSv4.2: Fix up an invalid combination of memory allocation flags 2022-02-25 18:50:12 -05:00
nfs42xdr.c NFSv42: Don't fail clone() unless the OP_CLONE operation failed 2021-11-17 14:08:23 -05:00
nfs.h
nfsroot.c nfsroot: Default mount option should ask for built-in NFS version 2020-11-02 10:29:03 -05:00
nfstrace.c NFSv4: Catch and trace server filehandle encoding errors 2021-04-14 09:36:29 -04:00
nfstrace.h NFS: Replace dfprintks with tracepoints in fscache read and write page functions 2022-03-13 12:59:35 -04:00
pagelist.c SUNRPC: Trace calls to .rpc_call_done 2021-10-20 18:09:54 -04:00
pnfs_dev.c NFSv4/pnfs: Add tracing for the deviceid cache 2020-12-16 17:25:24 -05:00
pnfs_nfs.c NFS: Fix up commit deadlocks 2021-10-20 18:09:45 -04:00
pnfs.c NFS: Convert GFP_NOFS to GFP_KERNEL 2022-02-25 18:50:12 -05:00
pnfs.h NFS: Move NFS protocol display macros to global header 2021-11-02 12:31:23 -04:00
proc.c NFS: NFSv2/v3 clients should never be setting NFS_CAP_XATTR 2022-02-25 18:50:13 -05:00
read.c NFS: discard NFS_RPC_SWAPFLAGS and RPC_TASK_ROOTCREDS 2022-03-13 12:59:35 -04:00
super.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
symlink.c
sysctl.c
sysfs.c Revert "NFSv4: use unique client identifiers in network namespaces" 2022-02-28 10:09:23 -05:00
sysfs.h NFSv4: Fix up RCU annotations for struct nfs_netns_client 2020-10-15 13:31:08 -04:00
unlink.c NFS: Fix open coded versions of nfs_set_cache_invalid() 2021-03-08 16:13:55 -05:00
write.c SUNRPC: improve 'swap' handling: scheduling and PF_MEMALLOC 2022-03-13 12:59:35 -04:00