NFS O_DIRECT: Change the NFS O_DIRECT path so that it
no longer calls the generic VFS read and write routines.
This allows all application read requests to pass through
to the server, instead of just the ones that appear to be
inside the file. this eliminates the requirement to use a
GETATTR operation before each read or write to determine
where the EOF is. This is a significant performance and
scalability win.
It also removes all requirements for holding the inode
semaphore during NFS direct reads and writes, as the read
and write logic no longer needs atomic access to the size
of the file. this also helps client CPU scalability by
reducing the serialization of writes against a single file.