linux/fs/nfs
Chuck Lever 06cf6f2ed0 NFS: Eliminate nfs_get_user_pages()
Neil Brown observed that the kmalloc() in nfs_get_user_pages() is more
likely to fail if the I/O is large enough to require the allocation of more
than a single page to keep track of all the pinned pages in the user's
buffer.

Instead of tracking one large page array per dreq/iocb, track pages per
nfs_read/write_data, just like the cached I/O path does.  An array for
pages is already allocated for us by nfs_readdata_alloc() (and the write
and commit equivalents).

This is also required for adding support for vectored I/O to the NFS direct
I/O path.

The original reason to pin the user buffer and allocate all the NFS data
structures before trying to schedule I/O was to ensure all needed resources
are allocated on the client before starting to send requests.  This reduces
the chance that resource exhaustion on the client will cause a short read
or write.

On the other hand, for an application making very large application I/O
requests, this means that it will be nearly impossible for the application
to make forward progress on a resource-limited client.

Thus, moving the buffer pinning functionality into the I/O scheduling
loops should be good for scalability.  The next patch will do the same for
NFS data structure allocation.

Signed-off-by: Chuck Lever <cel@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-06-24 13:11:39 -04:00
..
callback_proc.c NFSv4: Ensure change attribute returned by GETATTR callback conforms to spec 2006-01-06 14:58:51 -05:00
callback_xdr.c NFSv4: really return status from decode_recall_args() 2006-06-09 09:34:12 -04:00
callback.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
callback.h NFSv4: Allow user to set the port used by the NFSv4 callback channel 2006-01-06 14:58:52 -05:00
delegation.c NFSv4: Send the delegation stateid for SETATTR calls 2006-03-20 13:44:46 -05:00
delegation.h NFSv4: Send the delegation stateid for SETATTR calls 2006-03-20 13:44:46 -05:00
dir.c NFS: Ensure the client submounts, when it crosses a server mountpoint. 2006-06-09 09:34:19 -04:00
direct.c NFS: Eliminate nfs_get_user_pages() 2006-06-24 13:11:39 -04:00
file.c Merge branch 'master' of /home/trondmy/kernel/linux-2.6/ 2006-06-24 13:07:53 -04:00
idmap.c NFS: Store the file system "fsid" value in the NFS super block. 2006-06-09 09:34:19 -04:00
inode.c [PATCH] VFS: Permit filesystem to perform statfs with a known root dentry 2006-06-23 07:42:45 -07:00
internal.h NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
iostat.h NFSv4: Fix an oops in nfs4_fill_super 2006-03-20 13:44:48 -05:00
Makefile NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
mount_clnt.c Merge git://git.linux-nfs.org/pub/linux/nfs-2.6 2006-03-25 09:18:27 -08:00
namespace.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
nfs2xdr.c Merge branch 'master' of /home/trondmy/kernel/linux-2.6/ 2006-06-24 13:07:53 -04:00
nfs3acl.c NFSv3: Client-side nfsacl caching fix 2006-06-09 09:34:11 -04:00
nfs3proc.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
nfs3xdr.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
nfs4_fs.h NFSv4: Define an fs_locations bitmap 2006-06-09 09:34:25 -04:00
nfs4namespace.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
nfs4proc.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
nfs4renewd.c NFSv4: Remove requirement for machine creds for the "renew" operation 2006-01-06 14:58:47 -05:00
nfs4state.c NFSv4: SETCLIENTID_CONFIRM should handle NFS4ERR_DELAY/NFS4ERR_RESOURCE 2006-03-20 13:44:47 -05:00
nfs4xdr.c NFSv4: A root pathname is sent as a zero component4 2006-06-09 09:34:30 -04:00
nfsroot.c [PATCH] nfsroot port= parameter fix [backport of 2.4 fix] 2006-02-07 21:00:42 -05:00
pagelist.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
proc.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
read.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00
super.c Merge branch 'master' of /home/trondmy/kernel/linux-2.6/ 2006-06-24 13:07:53 -04:00
symlink.c NFS: Separate metadata and page cache revalidation mechanisms 2006-06-09 09:34:09 -04:00
sysctl.c NFS: Add timeout to submounts 2006-06-09 09:34:20 -04:00
unlink.c NFS: kzalloc conversion in fs/nfs 2006-03-20 13:44:10 -05:00
write.c NFS: Split fs/nfs/inode.c 2006-06-09 09:34:33 -04:00