
Todo/Status List for Linux-NFS

 *	denotes to be done;
 o	denotes draft implementation, possibly commented out
 -	denotes done,
 +	denotes done and tested
------------------------------------------------------------------

RPC:

 *	Server-side AUTH_DES authentication

NFS:

 *	stat() calls don't check whether the cached attrs are stil valid
	(this is a problem in the VFS).
 -	NFS_ROOT stuff needs fixing.
 o	Swapping over NFS.

	Issues of swapout:
	 *	Avoid recursion in low memory situations where
		kmalloc may call try_to_swap_out etc ad inf.
	 *	Don't do async I/O on swap files.

	For special-casing related to NFS swap I/O, flag swap file 
	semantics in inode->i_flags. In swapfile.c, change functions
	to call readpage/writepage if available, otherwise proceed
	as usual.

 -	Write-back support.
 *	Disable page cache invalidation/flushing for locked file
	regions.
 -	Directory caching (we now have page-sized dircache entries
	which could easily be organized into a linked list). These
	dircache pages come along as a linked list that can be copied
	almost 1-to-1 into a dirent struct. If this is put into the
	VFS, other remote fs's will also benefit.

	[Note: I just increased the readdir cache to hold more than
	one directory. With this, the exclusive lock on readdir goes
	away, too. With a larger cache, it may also be worth to think
	about directory readahead...]
 *	Better lookup caching?
 *	When a read lock is present, don't time out attr cache or
	page cache for that region. Likewise, if a write lock is present,
	be lazy on write-back.
 *	Implement CTO.
 -	BUG: Invalidate readdir cache after remove/rename/unlink
 *	Automatic `mounting' when the server crosses mount points
	transparently (some IRIX machines seem to do this when
	using -nohide).
 *	NFSv3 support. This requires careful design to maximize
	code sharing between NFSv2 and NFSv3.
 *	More robust rename handling (see comment before nfs_rename).
 *	Add Miquel's O_EXCL hack for file creation.
 *	Performance improvement: When a complete reply is received, and
	the (async) task is woken up, don't put it on rpciod's scheduling
	queue, but add it to a `fast scheduler queue.' The fast scheduler
	could be a special handler that's registered on the tq_scheduler task
	queue. This queue is fired by the kernel scheduler as soon as
	the other bottom halves have been run.

	Note that implementing this for sync tasks is even trickier than
	for async tasks, because you have to make sure you do the right
	thing in rpc_sleep_on().
 *	writeback of writable mmaps. Dirty pages are not subject to
	writeback scheduling. Also, msync should make sure pages are
	written with O_SYNC on.


nfsd:

 *	uid/gid mapping, and rpc.ugidd support
 -	Don't read/write a file that might have mandatory locks.
 *	Implement secure/kerberos export options (take care of lockd
	fopen() calls--most clients seem to use NULL creds for lockd).
 -	there's a bug in readdir wrt large directories. Try mounting
	the linux source tree and do an ls on include/linux...
 *	Support for UNIX socket creation.
 *	Someone should look over the error return codes. I tend to
	mix up EPERM and EACCES.
 *	NFSv3 support.
 -	Refuse to look up inodes in procfs (security issues).
 o	Delayed writes (delay syncing of file data when nfsd handles
	several write requests for the same file concurrently).
	(Draft - see nfsd_write in fs/nfsd/write.c. Needs benchmarking).
 *	Faster read operations (single copy): mmap the file region
	to be read into VM, and pass the VMA to the xdr routines
	which pass the region's VM address into sock->ops->writemsg.
	This copies the file data directly from the page cache into
	the network buffer.
	Release the vma region after encoding.
 *	Faster write operations (single copy, with IPv6 net layout):
	Get the unfragmented UDP datagram, pull the header and
	do normal processing. Then mmap the file, copy the write data,
	and release VMA.
 -	Clear setuid/setgid bit after write().
 *	Quota support.

lockd:

 *	Server should run on privileged port.
 *	Testing reclaim support.
 *	HP lockd accepts our GRANT_MSG callback and passes on the grant
	to the blocking process, but doesn't reply with a GRANT_RES. 
	It's not clear to me why it would do this.
 *	Unregister hosts (SM_UNMON) with rpc.statd when appropriate.

mountd

 *	Unregister service from portmapper upon exit/SIGTERM

mount

 *	If available, use version 3 of the mount protocol and
	obtain pathconf data (fill in data->bsize).

documentation:

 -	Manpages need to be written
