linux/fs/nfs
David Howells 16f2f4e679 nfs: Implement cache I/O by accessing the cache directly
Move NFS to using fscache DIO API instead of the old upstream I/O API as
that has been removed.  This is a stopgap solution as the intention is that
at sometime in the future, the cache will move to using larger blocks and
won't be able to store individual pages in order to deal with the potential
for data corruption due to the backing filesystem being able insert/remove
bridging blocks of zeros into its extent list[1].

NFS then reads and writes cache pages synchronously and one page at a time.

The preferred change would be to use the netfs lib, but the new I/O API can
be used directly.  It's just that as the cache now needs to track data for
itself, caching blocks may exceed page size...

This code is somewhat borrowed from my "fallback I/O" patchset[2].

Changes
=======
ver #3:
 - Restore lost =n fallback for nfs_fscache_release_page()[2].

Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: Dave Wysochanski <dwysocha@redhat.com>
Acked-by: Jeff Layton <jlayton@kernel.org>
cc: Trond Myklebust <trond.myklebust@hammerspace.com>
cc: Anna Schumaker <anna.schumaker@netapp.com>
cc: linux-nfs@vger.kernel.org
cc: linux-cachefs@redhat.com
Link: https://lore.kernel.org/r/YO17ZNOcq+9PajfQ@mit.edu [1]
Link: https://lore.kernel.org/r/202112100957.2oEDT20W-lkp@intel.com/ [2]
Link: https://lore.kernel.org/r/163189108292.2509237.12615909591150927232.stgit@warthog.procyon.org.uk/ [2]
Link: https://lore.kernel.org/r/163906981318.143852.17220018647843475985.stgit@warthog.procyon.org.uk/ # v2
Link: https://lore.kernel.org/r/163967184451.1823006.6450645559828329590.stgit@warthog.procyon.org.uk/ # v3
Link: https://lore.kernel.org/r/164021577632.640689.11069627070150063812.stgit@warthog.procyon.org.uk/ # v4
2022-01-10 11:53:25 +00:00
..
blocklayout nfs/blocklayout: use bdev_nr_bytes instead of open coding it 2021-10-18 14:43:23 -06:00
filelayout SUNRPC: Trace calls to .rpc_call_done 2021-10-20 18:09:54 -04:00
flexfilelayout SUNRPC: Trace calls to .rpc_call_done 2021-10-20 18:09:54 -04:00
cache_lib.c
cache_lib.h
callback_proc.c NFSv4.2 add tracepoint to CB_OFFLOAD 2021-11-04 19:43:30 -04:00
callback_xdr.c SUNRPC: Change return value type of .pc_encode 2021-10-13 11:34:49 -04:00
callback.c SUNRPC: Set rq_auth_stat in the pg_authenticate() callout 2021-08-10 14:18:35 -04:00
callback.h NFSv4: Add support for CB_RECALL_ANY for flexfiles layouts 2020-03-16 08:34:30 -04:00
client.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
delegation.c NFSv4: Fixes for nfs4_inode_return_delegation() 2021-10-20 18:09:53 -04: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: Remove the nfs4_label argument from nfs_setsecurity 2021-11-05 14:54:40 -04:00
direct.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
dns_resolve.c NFS: remove duplicate headers 2020-05-27 10:10:12 -04:00
dns_resolve.h
export.c NFS: Remove the nfs4_label argument from nfs_fhget() 2021-11-05 14:54:40 -04:00
file.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
fs_context.c NFSv4 introduce max_connect mount options 2021-08-27 16:37:17 -04:00
fscache.c nfs: Implement cache I/O by accessing the cache directly 2022-01-10 11:53:25 +00:00
fscache.h nfs: Implement cache I/O by accessing the cache directly 2022-01-10 11:53:25 +00:00
getroot.c NFS: Remove the nfs4_label argument from nfs_setsecurity 2021-11-05 14:54:40 -04:00
inode.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
internal.h NFS: Create a new nfs_alloc_fattr_with_label() function 2021-11-05 14:54:38 -04:00
io.c NFS: Fix up incorrect documentation 2021-04-05 09:04:20 -04:00
iostat.h
Kconfig nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00: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 NFS: Add sysfs support for per-container identifier 2019-07-06 14:54:49 -04:00
nfs2super.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
nfs2xdr.c SUNRPC: Clean up the handling of page padding in rpc_prepare_reply_pages() 2020-12-02 14:05:53 -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 NFS: Additional refactoring for fs_context conversion 2020-01-15 10:15:17 -05:00
nfs3proc.c NFS: Remove the nfs4_label argument from nfs_add_or_obtain() 2021-11-05 14:54:39 -04:00
nfs3super.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
nfs3xdr.c NFS: Default change_attr_type to NFS4_CHANGE_TYPE_IS_UNDEFINED 2021-10-03 20:49:06 -04:00
nfs4_fs.h NFS: Remove the nfs4_label from the nfs4_getattr_res 2021-11-05 14:54:39 -04:00
nfs4client.c NFS: Replace calls to nfs_probe_fsinfo() with nfs_probe_server() 2021-10-20 18:09:54 -04:00
nfs4file.c NFS: Remove the nfs4_label argument from nfs_fhget() 2021-11-05 14:54:40 -04:00
nfs4getroot.c
nfs4idmap.c Fix user namespace leak 2021-10-20 18:09:54 -04:00
nfs4idmap.h
nfs4namespace.c nfs: Fix memory leak of export_path 2020-06-26 08:43:14 -04:00
nfs4proc.c NFS client updates for Linux 5.16 2021-11-10 16:32:46 -08: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 NFSv4.1: handle NFS4ERR_NOSPC by CREATE_SESSION 2021-11-17 18:26:31 -05:00
nfs4super.c NFS: Adjust fs_context error logging 2021-01-10 13:32:39 -05:00
nfs4sysctl.c
nfs4trace.c pNFS/flexfiles: Add tracing for layout errors 2020-01-15 10:54:33 -05:00
nfs4trace.h NFSv4.2 add tracepoint to OFFLOAD_CANCEL 2021-11-04 19:43:30 -04:00
nfs4xdr.c NFS: Remove the nfs4_label argument from decode_getattr_*() functions 2021-11-05 14:54:40 -04:00
nfs42.h NFSv4.2: add the extended attribute proc functions. 2020-07-13 17:52:45 -04:00
nfs42proc.c NFSv42: Fix pagecache invalidation after COPY/CLONE 2021-11-17 14:08:23 -05:00
nfs42xattr.c nfs: Fix a typo in the file nfs42xattr.c 2021-04-05 09:04:20 -04: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: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00: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 NFSv4/pnfs: The layout barrier indicate a minimal value for the seqid 2021-08-09 16:57:04 -04:00
pnfs.h NFS: Move NFS protocol display macros to global header 2021-11-02 12:31:23 -04:00
proc.c NFS: Remove the nfs4_label argument from nfs_instantiate() 2021-11-05 14:54:39 -04:00
read.c nfs: Implement cache I/O by accessing the cache directly 2022-01-10 11:53:25 +00: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 NFSv4: Fix up RCU annotations for struct nfs_netns_client 2020-10-15 13:31:08 -04: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 nfs: Implement cache I/O by accessing the cache directly 2022-01-10 11:53:25 +00:00