
vfs.c:
	nfsd_open:
		Possible optimizations:

		 *	Instead of calling get_empty_filp, make the caller
			pass an empty file struct itself. This may save
			a potentially costly pass through the global file
			table. No visible improvement.

		 *	Caching of open files. Requires a tedious
			flushing scheme using watchdog timers and all.
			(Maximum cache time <= 2 secs).
			No visible improvement.

			This may however be necessary in order to avoid
			two nfsd's writing to the file simultaneously.
			This seems to be mandated by the NFSv3 spec.
			(see below).

	nfsd_write:
		Implement our own get_write_access that makes sure
		no two nfsd's get write access to the same region of
		the file at the same time. This is required by the spec.
		It could be implemented as part of the file cache.

		When doing sync writes, implement delayed writes when we
		notice write requests arrive from the client almost
		simultaneously.

		Dependencies: With NFSv2, we have no idea if the client
		opened the file with O_APPEND or not, so append-only
		files will always return NFSERR_PERM on write requests.

	nfsd_proc_mkdir et al:
		How do we make sure directory blocks are synced? Is this
		being taken care of by write_inode?

	nfsd_permission:
		The owner can always access the file even after having done
		an fchmod(fd, 0). However, `cp foo bar' should fail when
		bar is readonly.
		Possible fix:
		 -	disallow truncate when not writable, even for owner?
		 -	Make all creat() fail when not writable? Doesn't make
			a difference for Linux clients unless we also 
			change the client's nfs_create() semantics to those
			of SunOS.

	nfsd_read:
		Try to access the page cache directly by calling find_page
		on the inode. This avoids one mem->mem copy.

quotas:		Quota support has not been integrated with knfsd yet.
		I wish we had an additional abstraction layer in the VFS
		that supports functions like vopen(struct inode *, ...)
		etc, so I wouldn't have to duplicate that much code in
		vfs.c.
