tree 5fdc85b69eff2bb6d7d69e8bd4f97dc170e198f5
parent 2822541893d88f84dd4f1525108d73effecd9d39
author Eric Van Hensbergen <[EMAIL PROTECTED]> Sat, 10 Sep 2005 03:04:18 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Sat, 10 Sep 2005 03:57:56 -0700

[PATCH] v9fs: Documentation, Makefiles, Configuration


V9FS is a distributed file system for Linux which provides an
implementation of the Plan 9 resource sharing protocol 9P.  It can be
used to share all sorts of resources: static files, synthetic file servers
(such as /proc or /sys), devices, and application file servers (such as


Plan 9 ( is a research operating
system and associated applications suite developed by the Computing
Science Research Center of AT&T Bell Laboratories (now a part of
Lucent Technologies), the same group that developed UNIX , C, and C++.
Plan 9 was initially released in 1993 to universities, and then made
generally available in 1995. Its core operating systems code laid the
foundation for the Inferno Operating System released as a product by
Lucent Bell-Labs in 1997. The Inferno venture was the only commercial
embodiment of Plan 9 and is currently maintained as a product by Vita
Nuova ( After updated releases in 2000 and
2002, Plan 9 was open-sourced under the OSI approved Lucent Public
License in 2003.

The Plan 9 project was started by Ken Thompson and Rob Pike in 1985.
Their intent was to explore potential solutions to some of the
shortcomings of UNIX in the face of the widespread use of high-speed
networks to connect machines. In UNIX, networking was an afterthought
and UNIX clusters became little more than a network of stand-alone
systems. Plan 9 was designed from first principles as a seamless
distributed system with integrated secure network resource sharing.
Applications and services were architected in such a way as to allow
for implicit distribution across a cluster of systems. Configuring an
environment to use remote application components or services in place
of their local equivalent could be achieved with a few simple command
line instructions. For the most part, application implementations
operated independent of the location of their actual resources.

Commercial operating systems haven't changed much in the 20 years
since Plan 9 was conceived. Network and distributed systems support is
provided by a patchwork of middle-ware, with an endless number of
packages supplying pieces of the puzzle. Matters are complicated by
the use of different complicated protocols for individual services,
and separate implementations for kernel and application resources.
The V9FS project ( is an attempt to bring
Plan 9's unified approach to resource sharing to Linux and other
operating systems via support for the 9P2000 resource sharing


V9FS was originally developed by Ron Minnich and Maya Gokhale at Los
Alamos National Labs (LANL) in 1997.  In November of 2001, Greg Watson
setup a SourceForge project as a public repository for the code which
supported the Linux 2.4 kernel.

About a year ago, I picked up the initial attempt Ron Minnich had
made to provide 2.6 support and got the code integrated into a 2.6.5
kernel.   I then went through a line-for-line re-write attempting to
clean-up the code while more closely following the Linux Kernel style
guidelines.  I co-authored a paper with Ron Minnich on the V9FS Linux
support including performance comparisons to NFSv3 using Bonnie and
PostMark - this paper appeared at the USENIX/FREENIX 2005
conference in April 2005:
( ).


Our 2.6 kernel support is stabilizing and we'd like to begin pursuing
its integration into the official kernel tree.  We would appreciate any
review, comments, critiques, and additions from this community and are
actively seeking people to join our project and help us produce
something that would be acceptable and useful to the Linux community.


The code is reasonably stable, although there are no doubt corner cases
our regression tests haven't discovered yet.  It is in regular use by several
of the developers and has been tested on x86 and PowerPC
(32-bit and 64-bit) in both small and large (LANL cluster) deployments.
Our current regression tests include fsx, bonnie, and postmark.

It was our intention to keep things as simple as possible for this
release -- trying to focus on correctness within the core of the
protocol support versus a rich set of features.  For example: a more
complete security model and cache layer are in the road map, but
excluded from this release.   Additionally, we have removed support for
mmap operations at Al Viro's request.


Detailed performance numbers and analysis are included in the FREENIX
paper, but we show comparable performance to NFSv3 for large file
operations based on the Bonnie benchmark, and superior performance for
many small file operations based on the PostMark benchmark.   Somewhat
preliminary graphs (from the FREENIX paper) are available


The source code is available in a few different forms:

CVS: :pserver:[EMAIL PROTECTED]:/cvsroot/v9fs/linux-9p
Git: rsync:// (webgit:
9P: tcp!!6564

The user-level server is available from either the Plan 9 distribution
or from
Other support applications are still being developed, but preliminary
version can be downloaded from sourceforge.

Documentation on the protocol has historically been the Plan 9 Man
pages (, but there is
an effort under way to write a more complete Internet-Draft style
specification (

There are a couple of mailing lists supporting v9fs, but the most used
is [EMAIL PROTECTED] -- please direct/cc your
comments there so the other v9fs contibutors can participate in the
conversation.  There is also an IRC channel: irc://

This part of the patch contains Documentation, Makefiles, and configuration
file changes.

Signed-off-by: Eric Van Hensbergen <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 Documentation/filesystems/v9fs.txt |   95 +++++++++++++++++++++++++++++++++++++
 MAINTAINERS                        |   11 ++++
 fs/9p/Makefile                     |   17 ++++++
 fs/Kconfig                         |   11 ++++
 fs/Makefile                        |    1 
 5 files changed, 135 insertions(+)

diff --git a/Documentation/filesystems/v9fs.txt 
new file mode 100644
--- /dev/null
+++ b/Documentation/filesystems/v9fs.txt
@@ -0,0 +1,95 @@
+                       V9FS: 9P2000 for Linux
+                       ======================
+v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol.
+This software was originally developed by Ron Minnich <>
+and Maya Gokhale <[EMAIL PROTECTED]>.  Additional development by Greg Watson
+<[EMAIL PROTECTED]> and most recently Eric Van Hensbergen
+<[EMAIL PROTECTED]> and Latchesar Ionkov <[EMAIL PROTECTED]>.
+For remote file server:
+       mount -t 9P /mnt/9
+For Plan 9 From User Space applications (
+       mount -t 9P `namespace`/acme /mnt/9 -o proto=unix,name=$USER
+  proto=name   select an alternative transport.  Valid options are
+               currently:
+                       unix - specifying a named pipe mount point
+                       tcp  - specifying a normal TCP/IP connection
+                       fd   - used passed file descriptors for connection
+                                (see rfdno and wfdno)
+  name=name    user name to attempt mount as on the remote server.  The
+               server may override or ignore this value.  Certain user
+               names may require authentication.
+  aname=name   aname specifies the file tree to access when the server is
+               offering several exported file systems.
+  debug=n      specifies debug level.  The debug level is a bitmask.
+                       0x01 = display verbose error messages
+                       0x02 = developer debug (DEBUG_CURRENT)
+                       0x04 = display 9P trace
+                       0x08 = display VFS trace
+                       0x10 = display Marshalling debug
+                       0x20 = display RPC debug
+                       0x40 = display transport debug
+                       0x80 = display allocation debug
+  rfdno=n      the file descriptor for reading with proto=fd
+  wfdno=n      the file descriptor for writing with proto=fd
+  maxdata=n    the number of bytes to use for 9P packet payload (msize)
+  port=n       port to connect to on the remote server
+  timeout=n    request timeouts (in ms) (default 60000ms)
+  noextend     force legacy mode (no 9P2000.u semantics)
+  uid          attempt to mount as a particular uid
+  gid          attempt to mount with a particular gid
+  afid         security channel - used by Plan 9 authentication protocols
+  nodevmap     do not map special files - represent them as normal files.
+               This can be used to share devices/named pipes/sockets between
+               hosts.  This functionality will be expanded in later versions.
+The Linux version of the 9P server, along with some client-side utilities
+can be found at (along with a CVS repository of the
+development branch of this module).  There are user and developer mailing
+lists here, as well as a bug-tracker.
+For more information on the Plan 9 Operating System check out
+For information on Plan 9 from User Space (Plan 9 applications and libraries
+ported to Linux/BSD/OSX/etc) check out
+The 2.6 kernel support is working on PPC and x86.
@@ -2684,6 +2684,17 @@ L:       [EMAIL PROTECTED]
 S:     Maintained
+P:      Eric Van Hensbergen
+P:      Ron Minnich
+P:      Latchesar Ionkov
+S:      Maintained
 P:     Mauro Carvalho Chehab
diff --git a/fs/9p/Makefile b/fs/9p/Makefile
new file mode 100644
--- /dev/null
+++ b/fs/9p/Makefile
@@ -0,0 +1,17 @@
+obj-$(CONFIG_9P_FS) := 9p2000.o
+9p2000-objs := \
+       vfs_super.o \
+       vfs_inode.o \
+       vfs_file.o \
+       vfs_dir.o \
+       vfs_dentry.o \
+       error.o \
+       mux.o \
+       trans_fd.o \
+       trans_sock.o \
+       9p.o \
+       conv.o \
+       v9fs.o \
+       fid.o
diff --git a/fs/Kconfig b/fs/Kconfig
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -1703,6 +1703,17 @@ config AFS_FS
 config RXRPC
+config 9P_FS
+       tristate "Plan 9 Resource Sharing Support (9P2000) (Experimental)"
+       depends on INET && EXPERIMENTAL
+       help
+         If you say Y here, you will get experimental support for
+         Plan 9 resource sharing via the 9P2000 protocol.
+         See <> for more information.
+         If unsure, say N.
 menu "Partition Types"
diff --git a/fs/Makefile b/fs/Makefile
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -94,6 +94,7 @@ obj-$(CONFIG_RELAYFS_FS)      += relayfs/
 obj-$(CONFIG_SUN_OPENPROMFS)   += openpromfs/
 obj-$(CONFIG_JFS_FS)           += jfs/
 obj-$(CONFIG_XFS_FS)           += xfs/
+obj-$(CONFIG_9P_FS)            += 9p/
 obj-$(CONFIG_AFS_FS)           += afs/
 obj-$(CONFIG_BEFS_FS)          += befs/
 obj-$(CONFIG_HOSTFS)           += hostfs/
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to