summaryrefslogtreecommitdiffstats
path: root/linux-nfs/TODO
diff options
context:
space:
mode:
Diffstat (limited to 'linux-nfs/TODO')
-rw-r--r--linux-nfs/TODO121
1 files changed, 121 insertions, 0 deletions
diff --git a/linux-nfs/TODO b/linux-nfs/TODO
new file mode 100644
index 0000000..3a439d4
--- /dev/null
+++ b/linux-nfs/TODO
@@ -0,0 +1,121 @@
+
+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