remarkable-linux/fs/nfs
Weston Andros Adamson 2bfc6e566d nfs: add support for multiple nfs reqs per page
Add "page groups" - a circular list of nfs requests (struct nfs_page)
that all reference the same page. This gives nfs read and write paths
the ability to account for sub-page regions independently.  This
somewhat follows the design of struct buffer_head's sub-page
accounting.

Only "head" requests are ever added/removed from the inode list in
the buffered write path. "head" and "sub" requests are treated the
same through the read path and the rest of the write/commit path.
Requests are given an extra reference across the life of the list.

Page groups are never rejoined after being split. If the read/write
request fails and the client falls back to another path (ie revert
to MDS in PNFS case), the already split requests are pushed through
the recoalescing code again, which may split them further and then
coalesce them into properly sized requests on the wire. Fragmentation
shouldn't be a problem with the current design, because we flush all
requests in page group when a non-contiguous request is added, so
the only time resplitting should occur is on a resend of a read or
write.

This patch lays the groundwork for sub-page splitting, but does not
actually do any splitting. For now all page groups have one request
as pg_test functions don't yet split pages. There are several related
patches that are needed support multiple requests per page group.

Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2014-05-29 11:11:44 -04:00
..
blocklayout nfs: modify pg_test interface to return size_t 2014-05-29 11:11:43 -04:00
objlayout nfs: modify pg_test interface to return size_t 2014-05-29 11:11:43 -04:00
cache_lib.c NFS: simplify and clean cache library 2013-02-15 10:43:36 -05:00
cache_lib.h NFS: simplify and clean cache library 2013-02-15 10:43:36 -05:00
callback.c nfs: Use PTR_ERR_OR_ZERO in 'nfs41_callback_up' function 2013-10-28 18:16:55 -04:00
callback.h NFS: Add in v4.2 callback operation 2013-06-08 16:20:18 -04:00
callback_proc.c NFSv4.1: Minor optimisation in get_layout_by_fh_locked() 2014-02-19 21:21:06 -05:00
callback_xdr.c Merge branch 'labeled-nfs' into linux-next 2013-06-28 16:29:51 -04:00
client.c NFS: cache parsed auth_info in nfs_server 2013-10-28 15:37:43 -04:00
delegation.c NFS: Fix a delegation callback race 2014-03-02 22:03:12 -05:00
delegation.h NFSv4: Fix CB_RECALL_ANY to only return delegations that are not in use 2013-04-05 17:03:57 -04:00
dir.c NFS client updates for Linux 3.15 2014-04-06 10:09:38 -07:00
direct.c nfs: add support for multiple nfs reqs per page 2014-05-29 11:11:44 -04:00
dns_resolve.c NFS: Enabling v4.2 should not recompile nfsd and lockd 2013-11-19 16:20:40 -05:00
dns_resolve.h
file.c mm: implement ->map_pages for page cache 2014-04-07 16:35:53 -07:00
fscache-index.c
fscache.c NFS: Use i_writecount to control whether to get an fscache cookie in nfs_open() 2013-09-27 18:40:25 +01:00
fscache.h NFS: Use i_writecount to control whether to get an fscache cookie in nfs_open() 2013-09-27 18:40:25 +01:00
getroot.c NFS: Fix memroy leak for double mounts 2014-04-15 10:29:25 -04:00
idmap.c NFSv4: Convert idmapper to use the new framework for pipefs dentries 2013-09-01 11:12:42 -04:00
inode.c NFS: Don't declare inode uptodate unless all attributes were checked 2014-04-15 23:24:43 -04:00
internal.h NFS: Create a common nfs_pageio_ops struct 2014-05-29 11:11:41 -04:00
iostat.h
Kconfig nfs: fix pnfs Kconfig defaults 2013-11-15 13:41:43 -05:00
Makefile NFS: Enable slot table helpers for NFSv4.0 2013-09-03 15:26:33 -04:00
mount_clnt.c nfs: have nfs_mount fake up a auth_flavs list when the server didn't provide it 2013-06-28 15:51:51 -04:00
namespace.c nfs: use %p[dD] instead of open-coded (and often racy) equivalents 2013-10-24 23:34:50 -04:00
netns.h
nfs.h
nfs2super.c
nfs2xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfs3acl.c NFSv3: Fix return value of nfs3_proc_setacls 2014-02-03 13:14:23 -05:00
nfs3client.c
nfs3proc.c NFS: Create a common pgio_rpc_prepare function 2014-05-28 18:40:28 -04:00
nfs3super.c nfs: use generic posix ACL infrastructure for v3 Posix ACLs 2014-01-26 08:26:20 -05:00
nfs3xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfs4_fs.h NFS: Create a common read and write data struct 2014-05-28 18:12:47 -04:00
nfs4client.c NFSv4: Schedule recovery if nfs40_walk_client_list() is interrupted 2014-03-19 08:34:20 -04:00
nfs4file.c nfs: commit layouts in fdatasync 2014-05-28 17:45:30 -04:00
nfs4filelayout.c nfs: call nfs_can_coalesce_requests for every req 2014-05-29 11:11:44 -04:00
nfs4filelayout.h NFSv4.1: Use layout credentials for get_deviceinfo calls 2013-06-06 16:24:37 -04:00
nfs4filelayoutdev.c nfs: fix dead code of ipv6_addr_scope 2014-01-05 15:38:21 -05:00
nfs4getroot.c NFSv4: Fix security auto-negotiation 2013-09-07 16:18:30 -04:00
nfs4namespace.c NFSv4: Use the correct net namespace in nfs4_update_server 2014-02-17 14:15:46 -05:00
nfs4proc.c NFS: Create a common pgio_rpc_prepare function 2014-05-28 18:40:28 -04:00
nfs4renewd.c
nfs4session.c NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue 2014-02-01 15:13:39 -05:00
nfs4session.h NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue 2014-02-01 15:13:39 -05:00
nfs4state.c NFSv4: Ensure we respect soft mount timeouts during trunking discovery 2014-03-19 08:34:40 -04:00
nfs4super.c mm + fs: store shadow entries in page cache 2014-04-03 16:21:01 -07:00
nfs4sysctl.c
nfs4trace.c NFSv4.1: Add tracepoints for debugging slot table operations 2013-08-22 08:58:27 -04:00
nfs4trace.h NFS: Create a common read and write data struct 2014-05-28 18:12:47 -04:00
nfs4xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfsroot.c
nfstrace.c NFS: Add event tracing for generic NFS lookups 2013-08-22 08:58:18 -04:00
nfstrace.h NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping 2014-01-27 15:35:56 -05:00
pagelist.c nfs: add support for multiple nfs reqs per page 2014-05-29 11:11:44 -04:00
pnfs.c nfs: modify pg_test interface to return size_t 2014-05-29 11:11:43 -04:00
pnfs.h nfs: modify pg_test interface to return size_t 2014-05-29 11:11:43 -04:00
pnfs_dev.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
proc.c NFS: Create a common pgio_rpc_prepare function 2014-05-28 18:40:28 -04:00
read.c nfs: add support for multiple nfs reqs per page 2014-05-29 11:11:44 -04:00
super.c fs: push sync_filesystem() down to the file system's remount_fs() 2014-03-13 10:14:33 -04:00
symlink.c
sysctl.c
unlink.c nfs: emit a fsnotify_nameremove call in sillyrename codepath 2014-03-17 15:14:17 -04:00
write.c nfs: add support for multiple nfs reqs per page 2014-05-29 11:11:44 -04:00