+ revert-git-v9fs.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     revert git-v9fs
has been added to the -mm tree.  Its filename is
     revert-git-v9fs.patch

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
      reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/SubmitChecklist when testing your code ***

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this

The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/

------------------------------------------------------
Subject: revert git-v9fs
From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>

git-v9fs is causing i386 allmodconfig failures:

net/9p/trans_fd.o: In function `init_module':
trans_fd.c:(.init.text+0x0): multiple definition of `init_module'
net/9p/mod.o:mod.c:(.init.text+0x0): first defined here
/opt/crosstool/gcc-4.1.0-glibc-2.3.6/i686-unknown-linux-gnu/bin/i686-unknown-linux-gnu-ld: Warning: size of symbol `init_module' changed from 27 in net/9p/mod.o to 128 in net/9p/trans_fd.o

Cc: Eric Van Hensbergen <ericvh@xxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 fs/9p/fid.h                |   15 --
 fs/9p/v9fs.c               |   57 +-------
 fs/9p/v9fs.h               |   85 +++---------
 fs/9p/vfs_addr.c           |    2 
 fs/9p/vfs_dir.c            |    2 
 fs/9p/vfs_file.c           |   11 -
 fs/9p/vfs_inode.c          |   50 +------
 fs/9p/vfs_super.c          |   35 ++---
 include/linux/parser.h     |    2 
 include/net/9p/9p.h        |  235 ++++-------------------------------
 include/net/9p/client.h    |   35 -----
 include/net/9p/transport.h |   43 ------
 lib/parser.c               |   32 +---
 net/9p/Kconfig             |   10 +
 net/9p/Makefile            |    3 
 net/9p/client.c            |   32 +---
 net/9p/conv.c              |  128 -------------------
 net/9p/error.c             |   15 --
 net/9p/fcprint.c           |    8 -
 net/9p/mod.c               |    7 -
 net/9p/trans_fd.c          |  195 ++++-------------------------
 net/9p/trans_virtio.c      |  175 ++------------------------
 net/9p/util.c              |   36 +----
 23 files changed, 205 insertions(+), 1008 deletions(-)

diff -puN fs/9p/fid.h~revert-git-v9fs fs/9p/fid.h
--- a/fs/9p/fid.h~revert-git-v9fs
+++ a/fs/9p/fid.h
@@ -22,21 +22,6 @@
 
 #include <linux/list.h>
 
-/**
- * struct v9fs_dentry - 9p private data stored in dentry d_fsdata
- * @lock: protects the fidlist
- * @fidlist: list of FIDs currently associated with this dentry
- *
- * This structure defines the 9p private data associated with
- * a particular dentry.  In particular, this private data is used
- * to lookup which 9P FID handle should be used for a particular VFS
- * operation.  FID handles are associated with dentries instead of
- * inodes in order to more closely map functionality to the Plan 9
- * expected behavior for FID reclaimation and tracking.
- *
- * See Also: Mapping FIDs to Linux VFS model in
- * Design and Implementation of the Linux 9P File System documentation
- */
 struct v9fs_dentry {
 	spinlock_t lock; /* protect fidlist */
 	struct list_head fidlist;
diff -puN fs/9p/v9fs.c~revert-git-v9fs fs/9p/v9fs.c
--- a/fs/9p/v9fs.c~revert-git-v9fs
+++ a/fs/9p/v9fs.c
@@ -71,19 +71,19 @@ static match_table_t tokens = {
 
 /**
  * v9fs_parse_options - parse mount options into session structure
+ * @options: options string passed from mount
  * @v9ses: existing v9fs session information
  *
- * Return 0 upon success, -ERRNO upon failure.
  */
 
-static int v9fs_parse_options(struct v9fs_session_info *v9ses)
+static void v9fs_parse_options(struct v9fs_session_info *v9ses)
 {
 	char *options;
 	substring_t args[MAX_OPT_ARGS];
 	char *p;
 	int option = 0;
 	char *s, *e;
-	int ret = 0;
+	int ret;
 
 	/* setup defaults */
 	v9ses->afid = ~0;
@@ -91,26 +91,19 @@ static int v9fs_parse_options(struct v9f
 	v9ses->cache = 0;
 
 	if (!v9ses->options)
-		return 0;
+		return;
 
 	options = kstrdup(v9ses->options, GFP_KERNEL);
-	if (!options) {
-		P9_DPRINTK(P9_DEBUG_ERROR,
-			   "failed to allocate copy of option string\n");
-		return -ENOMEM;
-	}
-
 	while ((p = strsep(&options, ",")) != NULL) {
 		int token;
 		if (!*p)
 			continue;
 		token = match_token(p, tokens, args);
 		if (token < Opt_uname) {
-			int r = match_int(&args[0], &option);
-			if (r < 0) {
+			ret = match_int(&args[0], &option);
+			if (ret < 0) {
 				P9_DPRINTK(P9_DEBUG_ERROR,
 					"integer field, but no integer?\n");
-				ret = r;
 				continue;
 			}
 		}
@@ -132,10 +125,10 @@ static int v9fs_parse_options(struct v9f
 			v9ses->afid = option;
 			break;
 		case Opt_uname:
-			match_strlcpy(v9ses->uname, &args[0], PATH_MAX);
+			match_strcpy(v9ses->uname, &args[0]);
 			break;
 		case Opt_remotename:
-			match_strlcpy(v9ses->aname, &args[0], PATH_MAX);
+			match_strcpy(v9ses->aname, &args[0]);
 			break;
 		case Opt_nodevmap:
 			v9ses->nodev = 1;
@@ -146,13 +139,6 @@ static int v9fs_parse_options(struct v9f
 
 		case Opt_access:
 			s = match_strdup(&args[0]);
-			if (!s) {
-				P9_DPRINTK(P9_DEBUG_ERROR,
-					   "failed to allocate copy"
-					   " of option argument\n");
-				ret = -ENOMEM;
-				break;
-			}
 			v9ses->flags &= ~V9FS_ACCESS_MASK;
 			if (strcmp(s, "user") == 0)
 				v9ses->flags |= V9FS_ACCESS_USER;
@@ -172,7 +158,6 @@ static int v9fs_parse_options(struct v9f
 		}
 	}
 	kfree(options);
-	return ret;
 }
 
 /**
@@ -188,7 +173,6 @@ struct p9_fid *v9fs_session_init(struct 
 {
 	int retval = -EINVAL;
 	struct p9_fid *fid;
-	int rc;
 
 	v9ses->uname = __getname();
 	if (!v9ses->uname)
@@ -206,21 +190,8 @@ struct p9_fid *v9fs_session_init(struct 
 	v9ses->uid = ~0;
 	v9ses->dfltuid = V9FS_DEFUID;
 	v9ses->dfltgid = V9FS_DEFGID;
-	if (data) {
-		v9ses->options = kstrdup(data, GFP_KERNEL);
-		if (!v9ses->options) {
-			P9_DPRINTK(P9_DEBUG_ERROR,
-			   "failed to allocate copy of option string\n");
-			retval = -ENOMEM;
-			goto error;
-		}
-	}
-
-	rc = v9fs_parse_options(v9ses);
-	if (rc < 0) {
-		retval = rc;
-		goto error;
-	}
+	v9ses->options = kstrdup(data, GFP_KERNEL);
+	v9fs_parse_options(v9ses);
 
 	v9ses->clnt = p9_client_create(dev_name, v9ses->options);
 
@@ -262,6 +233,7 @@ struct p9_fid *v9fs_session_init(struct 
 	return fid;
 
 error:
+	v9fs_session_close(v9ses);
 	return ERR_PTR(retval);
 }
 
@@ -284,12 +256,9 @@ void v9fs_session_close(struct v9fs_sess
 }
 
 /**
- * v9fs_session_cancel - terminate a session
- * @v9ses: session to terminate
- *
- * mark transport as disconnected and cancel all pending requests.
+ * v9fs_session_cancel - mark transport as disconnected
+ * 	and cancel all pending requests.
  */
-
 void v9fs_session_cancel(struct v9fs_session_info *v9ses) {
 	P9_DPRINTK(P9_DEBUG_ERROR, "cancel session %p\n", v9ses);
 	p9_client_disconnect(v9ses->clnt);
diff -puN fs/9p/v9fs.h~revert-git-v9fs fs/9p/v9fs.h
--- a/fs/9p/v9fs.h~revert-git-v9fs
+++ a/fs/9p/v9fs.h
@@ -21,69 +21,18 @@
  *
  */
 
-/**
- * enum p9_session_flags - option flags for each 9P session
- * @V9FS_EXTENDED: whether or not to use 9P2000.u extensions
- * @V9FS_ACCESS_SINGLE: only the mounting user can access the hierarchy
- * @V9FS_ACCESS_USER: a new attach will be issued for every user (default)
- * @V9FS_ACCESS_ANY: use a single attach for all users
- * @V9FS_ACCESS_MASK: bit mask of different ACCESS options
- *
- * Session flags reflect options selected by users at mount time
- */
-enum p9_session_flags {
-	V9FS_EXTENDED		= 0x01,
-	V9FS_ACCESS_SINGLE	= 0x02,
-	V9FS_ACCESS_USER	= 0x04,
-	V9FS_ACCESS_ANY		= 0x06,
-	V9FS_ACCESS_MASK	= 0x06,
-};
-
-/* possible values of ->cache */
-/**
- * enum p9_cache_modes - user specified cache preferences
- * @CACHE_NONE: do not cache data, dentries, or directory contents (default)
- * @CACHE_LOOSE: cache data, dentries, and directory contents w/no consistency
- *
- * eventually support loose, tight, time, session, default always none
- */
-
-enum p9_cache_modes {
-	CACHE_NONE,
-	CACHE_LOOSE,
-};
-
-/**
- * struct v9fs_session_info - per-instance session information
- * @flags: session options of type &p9_session_flags
- * @nodev: set to 1 to disable device mapping
- * @debug: debug level
- * @afid: authentication handle
- * @cache: cache mode of type &p9_cache_modes
- * @options: copy of options string given by user
- * @uname: string user name to mount hierarchy as
- * @aname: mount specifier for remote hierarchy
- * @maxdata: maximum data to be sent/recvd per protocol message
- * @dfltuid: default numeric userid to mount hierarchy as
- * @dfltgid: default numeric groupid to mount hierarchy as
- * @uid: if %V9FS_ACCESS_SINGLE, the numeric uid which mounted the hierarchy
- * @clnt: reference to 9P network client instantiated for this session
- * @debugfs_dir: reference to debugfs_dir which can be used for add'l debug
- *
- * This structure holds state for each session instance established during
- * a sys_mount() .
- *
- * Bugs: there seems to be a lot of state which could be condensed and/or
- * removed.
- */
+/*
+  * Session structure provides information for an opened session
+  *
+  */
 
 struct v9fs_session_info {
 	/* options */
-	unsigned char flags;
-	unsigned char nodev;
-	unsigned short debug;
-	unsigned int afid;
-	unsigned int cache;
+	unsigned char flags;	/* session flags */
+	unsigned char nodev;	/* set to 1 if no disable device mapping */
+	unsigned short debug;	/* debug level */
+	unsigned int afid;	/* authentication fid */
+	unsigned int cache;	/* cache mode */
 
 	char *options;		/* copy of mount options */
 	char *uname;		/* user name to mount as */
@@ -96,6 +45,22 @@ struct v9fs_session_info {
 	struct dentry *debugfs_dir;
 };
 
+/* session flags */
+enum {
+	V9FS_EXTENDED		= 0x01,	/* 9P2000.u */
+	V9FS_ACCESS_MASK	= 0x06,	/* access mask */
+	V9FS_ACCESS_SINGLE	= 0x02,	/* only one user can access the files */
+	V9FS_ACCESS_USER	= 0x04,	/* attache per user */
+	V9FS_ACCESS_ANY		= 0x06,	/* use the same attach for all users */
+};
+
+/* possible values of ->cache */
+/* eventually support loose, tight, time, session, default always none */
+enum {
+	CACHE_NONE,		/* default */
+	CACHE_LOOSE,		/* no consistency */
+};
+
 extern struct dentry *v9fs_debugfs_root;
 
 struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *,
diff -puN fs/9p/vfs_addr.c~revert-git-v9fs fs/9p/vfs_addr.c
--- a/fs/9p/vfs_addr.c~revert-git-v9fs
+++ a/fs/9p/vfs_addr.c
@@ -43,7 +43,7 @@
 /**
  * v9fs_vfs_readpage - read an entire page in from 9P
  *
- * @filp: file being read
+ * @file: file being read
  * @page: structure to page
  *
  */
diff -puN fs/9p/vfs_dir.c~revert-git-v9fs fs/9p/vfs_dir.c
--- a/fs/9p/vfs_dir.c~revert-git-v9fs
+++ a/fs/9p/vfs_dir.c
@@ -60,7 +60,7 @@ static inline int dt_type(struct p9_stat
 
 /**
  * v9fs_dir_readdir - read a directory
- * @filp: opened file structure
+ * @filep: opened file structure
  * @dirent: directory structure ???
  * @filldir: function to populate directory structure ???
  *
diff -puN fs/9p/vfs_file.c~revert-git-v9fs fs/9p/vfs_file.c
--- a/fs/9p/vfs_file.c~revert-git-v9fs
+++ a/fs/9p/vfs_file.c
@@ -90,11 +90,10 @@ int v9fs_file_open(struct inode *inode, 
 
 /**
  * v9fs_file_lock - lock a file (or directory)
- * @filp: file to be locked
- * @cmd: lock command
- * @fl: file lock structure
+ * @inode: inode to be opened
+ * @file: file being opened
  *
- * Bugs: this looks like a local only lock, we should extend into 9P
+ * XXX - this looks like a local only lock, we should extend into 9P
  *       by using open exclusive
  */
 
@@ -119,7 +118,7 @@ static int v9fs_file_lock(struct file *f
 
 /**
  * v9fs_file_read - read from a file
- * @filp: file pointer to read
+ * @filep: file pointer to read
  * @data: data buffer to read data into
  * @count: size of buffer
  * @offset: offset at which to read data
@@ -143,7 +142,7 @@ v9fs_file_read(struct file *filp, char _
 
 /**
  * v9fs_file_write - write to a file
- * @filp: file pointer to write
+ * @filep: file pointer to write
  * @data: data buffer to write data from
  * @count: size of buffer
  * @offset: offset at which to write data
diff -puN fs/9p/vfs_inode.c~revert-git-v9fs fs/9p/vfs_inode.c
--- a/fs/9p/vfs_inode.c~revert-git-v9fs
+++ a/fs/9p/vfs_inode.c
@@ -129,12 +129,6 @@ static int p9mode2unixmode(struct v9fs_s
 	return res;
 }
 
-/**
- * v9fs_uflags2omode- convert posix open flags to plan 9 mode bits
- * @uflags: flags to convert
- *
- */
-
 int v9fs_uflags2omode(int uflags)
 {
 	int ret;
@@ -318,14 +312,6 @@ error:
 }
 */
 
-/**
- * v9fs_inode_from_fid - populate an inode by issuing a attribute request
- * @v9ses: session information
- * @fid: fid to issue attribute request for
- * @sb: superblock on which to create inode
- *
- */
-
 static struct inode *
 v9fs_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid,
 	struct super_block *sb)
@@ -398,12 +384,9 @@ v9fs_open_created(struct inode *inode, s
 
 /**
  * v9fs_create - Create a file
- * @v9ses: session information
- * @dir: directory that dentry is being created in
  * @dentry:  dentry that is being created
  * @perm: create permissions
  * @mode: open mode
- * @extension: 9p2000.u extension string to support devices, etc.
  *
  */
 static struct p9_fid *
@@ -478,7 +461,7 @@ error:
 
 /**
  * v9fs_vfs_create - VFS hook to create files
- * @dir: directory inode that is being created
+ * @inode: directory inode that is being created
  * @dentry:  dentry that is being deleted
  * @mode: create permissions
  * @nd: path information
@@ -536,7 +519,7 @@ error:
 
 /**
  * v9fs_vfs_mkdir - VFS mkdir hook to create a directory
- * @dir:  inode that is being unlinked
+ * @inode:  inode that is being unlinked
  * @dentry: dentry that is being unlinked
  * @mode: mode for new directory
  *
@@ -720,9 +703,9 @@ done:
 
 /**
  * v9fs_vfs_getattr - retrieve file metadata
- * @mnt: mount information
- * @dentry: file to get attributes on
- * @stat: metadata structure to populate
+ * @mnt - mount information
+ * @dentry - file to get attributes on
+ * @stat - metadata structure to populate
  *
  */
 
@@ -945,7 +928,7 @@ done:
 /**
  * v9fs_vfs_readlink - read a symlink's location
  * @dentry: dentry for symlink
- * @buffer: buffer to load symlink location into
+ * @buf: buffer to load symlink location into
  * @buflen: length of buffer
  *
  */
@@ -1013,12 +996,10 @@ static void *v9fs_vfs_follow_link(struct
  * v9fs_vfs_put_link - release a symlink path
  * @dentry: dentry for symlink
  * @nd: nameidata
- * @p: unused
  *
  */
 
-static void
-v9fs_vfs_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
+static void v9fs_vfs_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
 {
 	char *s = nd_get_link(nd);
 
@@ -1027,15 +1008,6 @@ v9fs_vfs_put_link(struct dentry *dentry,
 		__putname(s);
 }
 
-/**
- * v9fs_vfs_mkspecial - create a special file
- * @dir: inode to create special file in
- * @dentry: dentry to create
- * @mode: mode to create special file
- * @extension: 9p2000.u format extension string representing special file
- *
- */
-
 static int v9fs_vfs_mkspecial(struct inode *dir, struct dentry *dentry,
 	int mode, const char *extension)
 {
@@ -1065,7 +1037,7 @@ static int v9fs_vfs_mkspecial(struct ino
  * @dentry: dentry for symlink
  * @symname: symlink data
  *
- * See Also: 9P2000.u RFC for more information
+ * See 9P2000.u RFC for more information
  *
  */
 
@@ -1086,6 +1058,10 @@ v9fs_vfs_symlink(struct inode *dir, stru
  *
  */
 
+/* XXX - lots of code dup'd from symlink and creates,
+ * figure out a better reuse strategy
+ */
+
 static int
 v9fs_vfs_link(struct dentry *old_dentry, struct inode *dir,
 	      struct dentry *dentry)
@@ -1122,7 +1098,7 @@ clunk_fid:
  * @dir: inode destination for new link
  * @dentry: dentry for file
  * @mode: mode for creation
- * @rdev: device associated with special file
+ * @dev_t: device associated with special file
  *
  */
 
diff -puN fs/9p/vfs_super.c~revert-git-v9fs fs/9p/vfs_super.c
--- a/fs/9p/vfs_super.c~revert-git-v9fs
+++ a/fs/9p/vfs_super.c
@@ -75,7 +75,6 @@ static int v9fs_set_super(struct super_b
  * v9fs_fill_super - populate superblock with info
  * @sb: superblock
  * @v9ses: session information
- * @flags: flags propagated from v9fs_get_sb()
  *
  */
 
@@ -128,26 +127,29 @@ static int v9fs_get_sb(struct file_syste
 	fid = v9fs_session_init(v9ses, dev_name, data);
 	if (IS_ERR(fid)) {
 		retval = PTR_ERR(fid);
-		goto close_session;
+		fid = NULL;
+		kfree(v9ses);
+		v9ses = NULL;
+		goto error;
 	}
 
 	st = p9_client_stat(fid);
 	if (IS_ERR(st)) {
 		retval = PTR_ERR(st);
-		goto clunk_fid;
+		goto error;
 	}
 
 	sb = sget(fs_type, NULL, v9fs_set_super, v9ses);
 	if (IS_ERR(sb)) {
 		retval = PTR_ERR(sb);
-		goto free_stat;
+		goto error;
 	}
 	v9fs_fill_super(sb, v9ses, flags);
 
 	inode = v9fs_get_inode(sb, S_IFDIR | mode);
 	if (IS_ERR(inode)) {
 		retval = PTR_ERR(inode);
-		goto release_sb;
+		goto error;
 	}
 
 	inode->i_uid = uid;
@@ -156,7 +158,7 @@ static int v9fs_get_sb(struct file_syste
 	root = d_alloc_root(inode);
 	if (!root) {
 		retval = -ENOMEM;
-		goto release_sb;
+		goto error;
 	}
 
 	sb->s_root = root;
@@ -167,22 +169,21 @@ static int v9fs_get_sb(struct file_syste
 
 	return simple_set_mnt(mnt, sb);
 
-release_sb:
+error:
+	kfree(st);
+	if (fid)
+		p9_client_clunk(fid);
+
+	if (v9ses) {
+		v9fs_session_close(v9ses);
+		kfree(v9ses);
+	}
+
 	if (sb) {
 		up_write(&sb->s_umount);
 		deactivate_super(sb);
 	}
 
-free_stat:
-	kfree(st);
-
-clunk_fid:
-	p9_client_clunk(fid);
-
-close_session:
-	v9fs_session_close(v9ses);
-	kfree(v9ses);
-
 	return retval;
 }
 
diff -puN include/linux/parser.h~revert-git-v9fs include/linux/parser.h
--- a/include/linux/parser.h~revert-git-v9fs
+++ a/include/linux/parser.h
@@ -29,5 +29,5 @@ int match_token(char *, match_table_t ta
 int match_int(substring_t *, int *result);
 int match_octal(substring_t *, int *result);
 int match_hex(substring_t *, int *result);
-size_t match_strlcpy(char *, const substring_t *, size_t);
+void match_strcpy(char *, const substring_t *);
 char *match_strdup(const substring_t *);
diff -puN include/net/9p/9p.h~revert-git-v9fs include/net/9p/9p.h
--- a/include/net/9p/9p.h~revert-git-v9fs
+++ a/include/net/9p/9p.h
@@ -29,31 +29,14 @@
 
 #ifdef CONFIG_NET_9P_DEBUG
 
-/**
- * enum p9_debug_flags - bits for mount time debug parameter
- * @P9_DEBUG_ERROR: more verbose error messages including original error string
- * @P9_DEBUG_9P: 9P protocol tracing
- * @P9_DEBUG_VFS: VFS API tracing
- * @P9_DEBUG_CONV: protocol conversion tracing
- * @P9_DEBUG_MUX: trace management of concurrent transactions
- * @P9_DEBUG_TRANS: transport tracing
- * @P9_DEBUG_SLABS: memory management tracing
- * @P9_DEBUG_FCALL: verbose dump of protocol messages
- *
- * These flags are passed at mount time to turn on various levels of
- * verbosity and tracing which will be output to the system logs.
- */
-
-enum p9_debug_flags {
-	P9_DEBUG_ERROR = 	(1<<0),
-	P9_DEBUG_9P = 		(1<<2),
-	P9_DEBUG_VFS =		(1<<3),
-	P9_DEBUG_CONV =		(1<<4),
-	P9_DEBUG_MUX =		(1<<5),
-	P9_DEBUG_TRANS =	(1<<6),
-	P9_DEBUG_SLABS =      	(1<<7),
-	P9_DEBUG_FCALL =	(1<<8),
-};
+#define P9_DEBUG_ERROR		(1<<0)
+#define P9_DEBUG_9P	        (1<<2)
+#define P9_DEBUG_VFS	        (1<<3)
+#define P9_DEBUG_CONV		(1<<4)
+#define P9_DEBUG_MUX		(1<<5)
+#define P9_DEBUG_TRANS		(1<<6)
+#define P9_DEBUG_SLABS	      	(1<<7)
+#define P9_DEBUG_FCALL		(1<<8)
 
 extern unsigned int p9_debug_level;
 
@@ -79,47 +62,9 @@ do { \
 		format , __FUNCTION__, task_pid_nr(current), ## arg); \
 } while (0)
 
-/**
- * enum p9_msg_t - 9P message types
- * @P9_TVERSION: version handshake request
- * @P9_RVERSION: version handshake response
- * @P9_TAUTH: request to establish authentication channel
- * @P9_RAUTH: response with authentication information
- * @P9_TATTACH: establish user access to file service
- * @P9_RATTACH: response with top level handle to file hierarchy
- * @P9_TERROR: not used
- * @P9_RERROR: response for any failed request
- * @P9_TFLUSH: request to abort a previous request
- * @P9_RFLUSH: response when previous request has been cancelled
- * @P9_TWALK: descend a directory hierarchy
- * @P9_RWALK: response with new handle for position within hierarchy
- * @P9_TOPEN: prepare a handle for I/O on an existing file
- * @P9_ROPEN: response with file access information
- * @P9_TCREATE: prepare a handle for I/O on a new file
- * @P9_RCREATE: response with file access information
- * @P9_TREAD: request to transfer data from a file or directory
- * @P9_RREAD: response with data requested
- * @P9_TWRITE: reuqest to transfer data to a file
- * @P9_RWRITE: response with out much data was transfered to file
- * @P9_TCLUNK: forget about a handle to an entity within the file system
- * @P9_RCLUNK: response when server has forgotten about the handle
- * @P9_TREMOVE: request to remove an entity from the hierarchy
- * @P9_RREMOVE: response when server has removed the entity
- * @P9_TSTAT: request file entity attributes
- * @P9_RSTAT: response with file entity attributes
- * @P9_TWSTAT: request to update file entity attributes
- * @P9_RWSTAT: response when file entity attributes are updated
- *
- * There are 14 basic operations in 9P2000, paired as
- * requests and responses.  The one special case is ERROR
- * as there is no @P9_TERROR request for clients to transmit to
- * the server, but the server may respond to any other request
- * with an @P9_RERROR.
- *
- * See Also: http://plan9.bell-labs.com/sys/man/5/INDEX.html
- */
 
-enum p9_msg_t {
+/* Message Types */
+enum {
 	P9_TVERSION = 100,
 	P9_RVERSION,
 	P9_TAUTH = 102,
@@ -150,71 +95,30 @@ enum p9_msg_t {
 	P9_RWSTAT,
 };
 
-/**
- * enum p9_open_mode_t - 9P open modes
- * @P9_OREAD: open file for reading only
- * @P9_OWRITE: open file for writing only
- * @P9_ORDWR: open file for reading or writing
- * @P9_OEXEC: open file for execution
- * @P9_OTRUNC: truncate file to zero-length before opening it
- * @P9_OREXEC: close the file when an exec(2) system call is made
- * @P9_ORCLOSE: remove the file when the file is closed
- * @P9_OAPPEND: open the file and seek to the end
- * @P9_OEXCL: only create a file, do not open it
- *
- * 9P open modes differ slightly from Posix standard modes.
- * In particular, there are extra modes which specify different
- * semantic behaviors than may be available on standard Posix
- * systems.  For example, @P9_OREXEC and @P9_ORCLOSE are modes that
- * most likely will not be issued from the Linux VFS client, but may
- * be supported by servers.
- *
- * See Also: http://plan9.bell-labs.com/magic/man2html/2/open
- */
-
-enum p9_open_mode_t {
+/* open modes */
+enum {
 	P9_OREAD = 0x00,
 	P9_OWRITE = 0x01,
 	P9_ORDWR = 0x02,
 	P9_OEXEC = 0x03,
+	P9_OEXCL = 0x04,
 	P9_OTRUNC = 0x10,
 	P9_OREXEC = 0x20,
 	P9_ORCLOSE = 0x40,
 	P9_OAPPEND = 0x80,
-	P9_OEXCL = 0x1000,
 };
 
-/**
- * enum p9_perm_t - 9P permissions
- * @P9_DMDIR: mode bite for directories
- * @P9_DMAPPEND: mode bit for is append-only
- * @P9_DMEXCL: mode bit for excluse use (only one open handle allowed)
- * @P9_DMMOUNT: mode bite for mount points
- * @P9_DMAUTH: mode bit for authentication file
- * @P9_DMTMP: mode bit for non-backed-up files
- * @P9_DMSYMLINK: mode bit for symbolic links (9P2000.u)
- * @P9_DMLINK: mode bit for hard-link (9P2000.u)
- * @P9_DMDEVICE: mode bit for device files (9P2000.u)
- * @P9_DMNAMEDPIPE: mode bit for named pipe (9P2000.u)
- * @P9_DMSOCKET: mode bit for socket (9P2000.u)
- * @P9_DMSETUID: mode bit for setuid (9P2000.u)
- * @P9_DMSETGID: mode bit for setgid (9P2000.u)
- * @P9_DMSETVTX: mode bit for sticky bit (9P2000.u)
- *
- * 9P permissions differ slightly from Posix standard modes.
- *
- * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat
- */
-enum p9_perm_t {
+/* permissions */
+enum {
 	P9_DMDIR = 0x80000000,
 	P9_DMAPPEND = 0x40000000,
 	P9_DMEXCL = 0x20000000,
 	P9_DMMOUNT = 0x10000000,
 	P9_DMAUTH = 0x08000000,
 	P9_DMTMP = 0x04000000,
-/* 9P2000.u extensions */
 	P9_DMSYMLINK = 0x02000000,
 	P9_DMLINK = 0x01000000,
+	/* 9P2000.u extensions */
 	P9_DMDEVICE = 0x00800000,
 	P9_DMNAMEDPIPE = 0x00200000,
 	P9_DMSOCKET = 0x00100000,
@@ -223,26 +127,8 @@ enum p9_perm_t {
 	P9_DMSETVTX = 0x00010000,
 };
 
-/**
- * enum p9_qid_t - QID types
- * @P9_QTDIR: directory
- * @P9_QTAPPEND: append-only
- * @P9_QTEXCL: excluse use (only one open handle allowed)
- * @P9_QTMOUNT: mount points
- * @P9_QTAUTH: authentication file
- * @P9_QTTMP: non-backed-up files
- * @P9_QTSYMLINK: symbolic links (9P2000.u)
- * @P9_QTLINK: hard-link (9P2000.u)
- * @P9_QTFILE: normal files
- *
- * QID types are a subset of permissions - they are primarily
- * used to differentiate semantics for a file system entity via
- * a jump-table.  Their value is also the most signifigant 16 bits
- * of the permission_t
- *
- * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat
- */
-enum p9_qid_t {
+/* qid.types */
+enum {
 	P9_QTDIR = 0x80,
 	P9_QTAPPEND = 0x40,
 	P9_QTEXCL = 0x20,
@@ -254,7 +140,6 @@ enum p9_qid_t {
 	P9_QTFILE = 0x00,
 };
 
-/* 9P Magic Numbers */
 #define P9_NOTAG	(u16)(~0)
 #define P9_NOFID	(u32)(~0)
 #define P9_MAXWELEM	16
@@ -262,69 +147,19 @@ enum p9_qid_t {
 /* ample room for Twrite/Rread header */
 #define P9_IOHDRSZ	24
 
-/**
- * struct p9_str - length prefixed string type
- * @len: length of the string
- * @str: the string
- *
- * The protocol uses length prefixed strings for all
- * string data, so we replicate that for our internal
- * string members.
- */
-
 struct p9_str {
 	u16 len;
 	char *str;
 };
 
-/**
- * struct p9_qid - file system entity information
- * @type: 8-bit type &p9_qid_t
- * @version: 16-bit monotonically incrementing version number
- * @path: 64-bit per-server-unique ID for a file system element
- *
- * qids are identifiers used by 9P servers to track file system
- * entities.  The type is used to differentiate semantics for operations
- * on the entity (ie. read means something different on a directory than
- * on a file).  The path provides a server unique index for an entity
- * (roughly analogous to an inode number), while the version is updated
- * every time a file is modified and can be used to maintain cache
- * coherency between clients and serves.
- * Servers will often differentiate purely synthetic entities by setting
- * their version to 0, signaling that they should never be cached and
- * should be accessed synchronously.
- *
- * See Also://plan9.bell-labs.com/magic/man2html/2/stat
- */
-
+/* qids are the unique ID for a file (like an inode */
 struct p9_qid {
 	u8 type;
 	u32 version;
 	u64 path;
 };
 
-/**
- * struct p9_stat - file system metadata information
- * @size: length prefix for this stat structure instance
- * @type: the type of the server (equivilent to a major number)
- * @dev: the sub-type of the server (equivilent to a minor number)
- * @qid: unique id from the server of type &p9_qid
- * @mode: Plan 9 format permissions of type &p9_perm_t
- * @atime: Last access/read time
- * @mtime: Last modify/write time
- * @length: file length
- * @name: last element of path (aka filename) in type &p9_str
- * @uid: owner name in type &p9_str
- * @gid: group owner in type &p9_str
- * @muid: last modifier in type &p9_str
- * @extension: area used to encode extended UNIX support in type &p9_str
- * @n_uid: numeric user id of owner (part of 9p2000.u extension)
- * @n_gid: numeric group id (part of 9p2000.u extension)
- * @n_muid: numeric user id of laster modifier (part of 9p2000.u extension)
- *
- * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat
- */
-
+/* Plan 9 file metadata (stat) structure */
 struct p9_stat {
 	u16 size;
 	u16 type;
@@ -344,14 +179,10 @@ struct p9_stat {
 	u32 n_muid;			/* 9p2000.u extensions */
 };
 
-/*
- * file metadata (stat) structure used to create Twstat message
- * The is identical to &p9_stat, but the strings don't point to
- * the same memory block and should be freed separately
- *
- * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat
- */
-
+/* file metadata (stat) structure used to create Twstat message
+   The is similar to p9_stat, but the strings don't point to
+   the same memory block and should be freed separately
+*/
 struct p9_wstat {
 	u16 size;
 	u16 type;
@@ -504,20 +335,10 @@ struct p9_twstat {
 struct p9_rwstat {
 };
 
-/**
- * struct p9_fcall - primary packet structure
- * @size: prefixed length of the structure
- * @id: protocol operating identifier of type &p9_msg_t
- * @tag: transaction id of the request
- * @sdata: payload
- * @params: per-operation parameters
- *
- * &p9_fcall represents the structure for all 9P RPC
- * transactions.  Requests are packaged into fcalls, and reponses
- * must be extracted from them.
- *
- * See Also: http://plan9.bell-labs.com/magic/man2html/2/fcall
- */
+/*
+  * fcall is the primary packet structure
+  *
+  */
 
 struct p9_fcall {
 	u32 size;
diff -puN include/net/9p/client.h~revert-git-v9fs include/net/9p/client.h
--- a/include/net/9p/client.h~revert-git-v9fs
+++ a/include/net/9p/client.h
@@ -26,23 +26,6 @@
 #ifndef NET_9P_CLIENT_H
 #define NET_9P_CLIENT_H
 
-/**
- * struct p9_client - per client instance state
- * @lock: protect @fidlist
- * @msize: maximum data size negotiated by protocol
- * @dotu: extension flags negotiated by protocol
- * @trans_mod: module API instantiated with this client
- * @trans: tranport instance state and API
- * @conn: connection state information used by trans_fd
- * @fidpool: fid handle accounting for session
- * @fidlist: List of active fid handles
- *
- * The client structure is used to keep track of various per-client
- * state that has been instantiated.
- *
- * Bugs: duplicated data and potentially unnecessary elements.
- */
-
 struct p9_client {
 	spinlock_t lock; /* protect client structure */
 	int msize;
@@ -55,24 +38,6 @@ struct p9_client {
 	struct list_head fidlist;
 };
 
-/**
- * struct p9_fid - file system entity handle
- * @clnt: back pointer to instantiating &p9_client
- * @fid: numeric identifier for this handle
- * @mode: current mode of this fid (enum?)
- * @qid: the &p9_qid server identifier this handle points to
- * @iounit: the server reported maximum transaction size for this file
- * @uid: the numeric uid of the local user who owns this handle
- * @aux: transport specific information (unused?)
- * @rdir_fpos: tracks offset of file position when reading directory contents
- * @rdir_pos: (unused?)
- * @rdir_fcall: holds response of last directory read request
- * @flist: per-client-instance fid tracking
- * @dlist: per-dentry fid tracking
- *
- * TODO: This needs lots of explanation.
- */
-
 struct p9_fid {
 	struct p9_client *clnt;
 	u32 fid;
diff -puN include/net/9p/transport.h~revert-git-v9fs include/net/9p/transport.h
--- a/include/net/9p/transport.h~revert-git-v9fs
+++ a/include/net/9p/transport.h
@@ -26,40 +26,12 @@
 #ifndef NET_9P_TRANSPORT_H
 #define NET_9P_TRANSPORT_H
 
-/**
- * enum p9_trans_status - different states of underlying transports
- * @Connected: transport is connected and healthy
- * @Disconnected: transport has been disconnected
- * @Hung: transport is connected by wedged
- *
- * This enumeration details the various states a transport
- * instatiation can be in.
- */
-
 enum p9_trans_status {
 	Connected,
 	Disconnected,
 	Hung,
 };
 
-/**
- * struct p9_trans - per-transport state and API
- * @status: transport &p9_trans_status
- * @msize: negotiated maximum packet size (duplicate from client)
- * @extended: negotiated protocol extensions (duplicate from client)
- * @priv: transport private data
- * @close: member function to disconnect and close the transport
- * @rpc: member function to issue a request to the transport
- *
- * This is the basic API for a transport instance.  It is used as
- * a handle by the client to issue requests.  This interface is currently
- * in flux during reorganization.
- *
- * Bugs: there is lots of duplicated data here and its not clear that
- * the member functions need to be per-instance versus per transport
- * module.
- */
-
 struct p9_trans {
 	enum p9_trans_status status;
 	int msize;
@@ -70,21 +42,6 @@ struct p9_trans {
 							struct p9_fcall **rc);
 };
 
-/**
- * struct p9_trans_module - transport module interface
- * @list: used to maintain a list of currently available transports
- * @name: the human-readable name of the transport
- * @maxsize: transport provided maximum packet size
- * @def: set if this transport should be considered the default
- * @create: member function to create a new connection on this transport
- *
- * This is the basic API for a transport module which is registered by the
- * transport module with the 9P core network module and used by the client
- * to instantiate a new connection on a transport.
- *
- * Bugs: the transport module list isn't protected.
- */
-
 struct p9_trans_module {
 	struct list_head list;
 	char *name;		/* name of transport */
diff -puN lib/parser.c~revert-git-v9fs lib/parser.c
--- a/lib/parser.c~revert-git-v9fs
+++ a/lib/parser.c
@@ -182,25 +182,18 @@ int match_hex(substring_t *s, int *resul
 }
 
 /**
- * match_strlcpy: - Copy the characters from a substring_t to a sized buffer
- * @dest: where to copy to
- * @src: &substring_t to copy
- * @size: size of destination buffer
+ * match_strcpy: - copies the characters from a substring_t to a string
+ * @to: string to copy characters to.
+ * @s: &substring_t to copy
  *
- * Description: Copy the characters in &substring_t @src to the
- * c-style string @dest.  Copy no more than @size - 1 characters, plus
- * the terminating NUL.  Return length of @src.
+ * Description: Copies the set of characters represented by the given
+ * &substring_t @s to the c-style string @to. Caller guarantees that @to is
+ * large enough to hold the characters of @s.
  */
-size_t match_strlcpy(char *dest, const substring_t *src, size_t size)
+void match_strcpy(char *to, const substring_t *s)
 {
-	size_t ret = src->to - src->from;
-
-	if (size) {
-		size_t len = ret >= size ? size - 1 : ret;
-		memcpy(dest, src->from, len);
-		dest[len] = '\0';
-	}
-	return ret;
+	memcpy(to, s->from, s->to - s->from);
+	to[s->to - s->from] = '\0';
 }
 
 /**
@@ -213,10 +206,9 @@ size_t match_strlcpy(char *dest, const s
  */
 char *match_strdup(const substring_t *s)
 {
-	size_t sz = s->to - s->from + 1;
-	char *p = kmalloc(sz, GFP_KERNEL);
+	char *p = kmalloc(s->to - s->from + 1, GFP_KERNEL);
 	if (p)
-		match_strlcpy(p, s, sz);
+		match_strcpy(p, s);
 	return p;
 }
 
@@ -224,5 +216,5 @@ EXPORT_SYMBOL(match_token);
 EXPORT_SYMBOL(match_int);
 EXPORT_SYMBOL(match_octal);
 EXPORT_SYMBOL(match_hex);
-EXPORT_SYMBOL(match_strlcpy);
+EXPORT_SYMBOL(match_strcpy);
 EXPORT_SYMBOL(match_strdup);
diff -puN net/9p/Kconfig~revert-git-v9fs net/9p/Kconfig
--- a/net/9p/Kconfig~revert-git-v9fs
+++ a/net/9p/Kconfig
@@ -13,6 +13,16 @@ menuconfig NET_9P
 
 	  If unsure, say N.
 
+config NET_9P_FD
+	depends on NET_9P
+	default y if NET_9P
+	tristate "9P File Descriptor Transports (Experimental)"
+	help
+	  This builds support for file descriptor transports for 9p
+	  which includes support for TCP/IP, named pipes, or passed
+	  file descriptors.  TCP/IP is the default transport for 9p,
+	  so if you are going to use 9p, you'll likely want this.
+
 config NET_9P_VIRTIO
 	depends on NET_9P && EXPERIMENTAL && VIRTIO
 	tristate "9P Virtio Transport (Experimental)"
diff -puN net/9p/Makefile~revert-git-v9fs net/9p/Makefile
--- a/net/9p/Makefile~revert-git-v9fs
+++ a/net/9p/Makefile
@@ -1,4 +1,5 @@
 obj-$(CONFIG_NET_9P) := 9pnet.o
+obj-$(CONFIG_NET_9P_FD) += 9pnet_fd.o
 obj-$(CONFIG_NET_9P_VIRTIO) += 9pnet_virtio.o
 
 9pnet-objs := \
@@ -8,6 +9,8 @@ obj-$(CONFIG_NET_9P_VIRTIO) += 9pnet_vir
 	error.o \
 	fcprint.o \
 	util.o \
+
+9pnet_fd-objs := \
 	trans_fd.o \
 
 9pnet_virtio-objs := \
diff -puN net/9p/client.c~revert-git-v9fs net/9p/client.c
--- a/net/9p/client.c~revert-git-v9fs
+++ a/net/9p/client.c
@@ -64,30 +64,21 @@ static match_table_t tokens = {
  * @options: options string passed from mount
  * @v9ses: existing v9fs session information
  *
- * Return 0 upon success, -ERRNO upon failure
  */
 
-static int parse_opts(char *opts, struct p9_client *clnt)
+static void parse_opts(char *options, struct p9_client *clnt)
 {
-	char *options;
 	char *p;
 	substring_t args[MAX_OPT_ARGS];
 	int option;
-	int ret = 0;
+	int ret;
 
 	clnt->trans_mod = v9fs_default_trans();
 	clnt->dotu = 1;
 	clnt->msize = 8192;
 
-	if (!opts)
-		return 0;
-
-	options = kstrdup(opts, GFP_KERNEL);
-	if (!options) {
-		P9_DPRINTK(P9_DEBUG_ERROR,
-				"failed to allocate copy of option string\n");
-		return -ENOMEM;
-	}
+	if (!options)
+		return;
 
 	while ((p = strsep(&options, ",")) != NULL) {
 		int token;
@@ -95,11 +86,10 @@ static int parse_opts(char *opts, struct
 			continue;
 		token = match_token(p, tokens, args);
 		if (token < Opt_trans) {
-			int r = match_int(&args[0], &option);
-			if (r < 0) {
+			ret = match_int(&args[0], &option);
+			if (ret < 0) {
 				P9_DPRINTK(P9_DEBUG_ERROR,
 					"integer field, but no integer?\n");
-				ret = r;
 				continue;
 			}
 		}
@@ -117,8 +107,6 @@ static int parse_opts(char *opts, struct
 			continue;
 		}
 	}
-	kfree(options);
-	return ret;
 }
 
 
@@ -150,20 +138,16 @@ struct p9_client *p9_client_create(const
 	if (!clnt)
 		return ERR_PTR(-ENOMEM);
 
-	clnt->trans = NULL;
 	spin_lock_init(&clnt->lock);
 	INIT_LIST_HEAD(&clnt->fidlist);
 	clnt->fidpool = p9_idpool_create();
-	if (IS_ERR(clnt->fidpool)) {
+	if (!clnt->fidpool) {
 		err = PTR_ERR(clnt->fidpool);
 		clnt->fidpool = NULL;
 		goto error;
 	}
 
-	err = parse_opts(options, clnt);
-	if (err < 0)
-		goto error;
-
+	parse_opts(options, clnt);
 	if (clnt->trans_mod == NULL) {
 		err = -EPROTONOSUPPORT;
 		P9_DPRINTK(P9_DEBUG_ERROR,
diff -puN net/9p/conv.c~revert-git-v9fs net/9p/conv.c
--- a/net/9p/conv.c~revert-git-v9fs
+++ a/net/9p/conv.c
@@ -197,7 +197,7 @@ static void buf_get_qid(struct cbuf *buf
 
 /**
  * p9_size_wstat - calculate the size of a variable length stat struct
- * @wstat: metadata (stat) structure
+ * @stat: metadata (stat) structure
  * @dotu: non-zero if 9P2000.u
  *
  */
@@ -511,12 +511,6 @@ p9_create_common(struct cbuf *bufp, u32 
 	return fc;
 }
 
-/**
- * p9_set_tag - set the tag field of an &p9_fcall structure
- * @fc: fcall structure to set tag within
- * @tag: tag id to set
- */
-
 void p9_set_tag(struct p9_fcall *fc, u16 tag)
 {
 	fc->tag = tag;
@@ -524,12 +518,6 @@ void p9_set_tag(struct p9_fcall *fc, u16
 }
 EXPORT_SYMBOL(p9_set_tag);
 
-/**
- * p9_create_tversion - allocates and creates a T_VERSION request
- * @msize: requested maximum data size
- * @version: version string to negotiate
- *
- */
 struct p9_fcall *p9_create_tversion(u32 msize, char *version)
 {
 	int size;
@@ -554,16 +542,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tversion);
 
-/**
- * p9_create_tauth - allocates and creates a T_AUTH request
- * @afid: handle to use for authentication protocol
- * @uname: user name attempting to authenticate
- * @aname: mount specifier for remote server
- * @n_uname: numeric id for user attempting to authneticate
- * @dotu: 9P2000.u extension flag
- *
- */
-
 struct p9_fcall *p9_create_tauth(u32 afid, char *uname, char *aname,
 	u32 n_uname, int dotu)
 {
@@ -602,18 +580,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tauth);
 
-/**
- * p9_create_tattach - allocates and creates a T_ATTACH request
- * @fid: handle to use for the new mount point
- * @afid: handle to use for authentication protocol
- * @uname: user name attempting to attach
- * @aname: mount specifier for remote server
- * @n_uname: numeric id for user attempting to attach
- * @n_uname: numeric id for user attempting to attach
- * @dotu: 9P2000.u extension flag
- *
- */
-
 struct p9_fcall *
 p9_create_tattach(u32 fid, u32 afid, char *uname, char *aname,
 	u32 n_uname, int dotu)
@@ -650,12 +616,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tattach);
 
-/**
- * p9_create_tflush - allocates and creates a T_FLUSH request
- * @oldtag: tag id for the transaction we are attempting to cancel
- *
- */
-
 struct p9_fcall *p9_create_tflush(u16 oldtag)
 {
 	int size;
@@ -679,15 +639,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tflush);
 
-/**
- * p9_create_twalk - allocates and creates a T_FLUSH request
- * @fid: handle we are traversing from
- * @newfid: a new handle for this transaction
- * @nwname: number of path elements to traverse
- * @wnames: array of path elements
- *
- */
-
 struct p9_fcall *p9_create_twalk(u32 fid, u32 newfid, u16 nwname,
 				     char **wnames)
 {
@@ -726,13 +677,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_twalk);
 
-/**
- * p9_create_topen - allocates and creates a T_OPEN request
- * @fid: handle we are trying to open
- * @mode: what mode we are trying to open the file in
- *
- */
-
 struct p9_fcall *p9_create_topen(u32 fid, u8 mode)
 {
 	int size;
@@ -757,19 +701,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_topen);
 
-/**
- * p9_create_tcreate - allocates and creates a T_CREATE request
- * @fid: handle of directory we are trying to create in
- * @name: name of the file we are trying to create
- * @perm: permissions for the file we are trying to create
- * @mode: what mode we are trying to open the file in
- * @extension: 9p2000.u extension string (for special files)
- * @dotu: 9p2000.u enabled flag
- *
- * Note: Plan 9 create semantics include opening the resulting file
- * which is why mode is included.
- */
-
 struct p9_fcall *p9_create_tcreate(u32 fid, char *name, u32 perm, u8 mode,
 	char *extension, int dotu)
 {
@@ -805,13 +736,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tcreate);
 
-/**
- * p9_create_tread - allocates and creates a T_READ request
- * @fid: handle of the file we are trying to read
- * @offset: offset to start reading from
- * @count: how many bytes to read
- */
-
 struct p9_fcall *p9_create_tread(u32 fid, u64 offset, u32 count)
 {
 	int size;
@@ -837,17 +761,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tread);
 
-/**
- * p9_create_twrite - allocates and creates a T_WRITE request from the kernel
- * @fid: handle of the file we are trying to write
- * @offset: offset to start writing at
- * @count: how many bytes to write
- * @data: data to write
- *
- * This function will create a requst with data buffers from the kernel
- * such as the page cache.
- */
-
 struct p9_fcall *p9_create_twrite(u32 fid, u64 offset, u32 count,
 				      const char *data)
 {
@@ -881,16 +794,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_twrite);
 
-/**
- * p9_create_twrite_u - allocates and creates a T_WRITE request from userspace
- * @fid: handle of the file we are trying to write
- * @offset: offset to start writing at
- * @count: how many bytes to write
- * @data: data to write
- *
- * This function will create a request with data buffers from userspace
- */
-
 struct p9_fcall *p9_create_twrite_u(u32 fid, u64 offset, u32 count,
 				      const char __user *data)
 {
@@ -924,14 +827,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_twrite_u);
 
-/**
- * p9_create_tclunk - allocate a request to forget about a file handle
- * @fid: handle of the file we closing or forgetting about
- *
- * clunk is used both to close open files and to discard transient handles
- * which may be created during meta-data operations and hierarchy traversal.
- */
-
 struct p9_fcall *p9_create_tclunk(u32 fid)
 {
 	int size;
@@ -955,12 +850,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tclunk);
 
-/**
- * p9_create_tremove - allocate and create a request to remove a file
- * @fid: handle of the file or directory we are removing
- *
- */
-
 struct p9_fcall *p9_create_tremove(u32 fid)
 {
 	int size;
@@ -984,12 +873,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tremove);
 
-/**
- * p9_create_tstat - allocate and populate a request for attributes
- * @fid: handle of the file or directory we are trying to get the attributes of
- *
- */
-
 struct p9_fcall *p9_create_tstat(u32 fid)
 {
 	int size;
@@ -1013,14 +896,6 @@ error:
 }
 EXPORT_SYMBOL(p9_create_tstat);
 
-/**
- * p9_create_tstat - allocate and populate a request to change attributes
- * @fid: handle of the file or directory we are trying to change
- * @wstat: &p9_stat structure with attributes we wish to set
- * @dotu: 9p2000.u enabled flag
- *
- */
-
 struct p9_fcall *p9_create_twstat(u32 fid, struct p9_wstat *wstat,
 				      int dotu)
 {
@@ -1047,4 +922,3 @@ error:
 	return fc;
 }
 EXPORT_SYMBOL(p9_create_twstat);
-
diff -puN net/9p/error.c~revert-git-v9fs net/9p/error.c
--- a/net/9p/error.c~revert-git-v9fs
+++ a/net/9p/error.c
@@ -33,13 +33,6 @@
 #include <linux/errno.h>
 #include <net/9p/9p.h>
 
-/**
- * struct errormap - map string errors from Plan 9 to Linux numeric ids
- * @name: string sent over 9P
- * @val: numeric id most closely representing @name
- * @namelen: length of string
- * @list: hash-table list for string lookup
- */
 struct errormap {
 	char *name;
 	int val;
@@ -184,7 +177,8 @@ static struct errormap errmap[] = {
 };
 
 /**
- * p9_error_init - preload mappings into hash list
+ * p9_error_init - preload
+ * @errstr: error string
  *
  */
 
@@ -212,7 +206,6 @@ EXPORT_SYMBOL(p9_error_init);
 /**
  * errstr2errno - convert error string to error number
  * @errstr: error string
- * @len: length of error string
  *
  */
 
@@ -237,8 +230,8 @@ int p9_errstr2errno(char *errstr, int le
 	if (errno == 0) {
 		/* TODO: if error isn't found, add it dynamically */
 		errstr[len] = 0;
-		printk(KERN_ERR "%s: server reported unknown error %s\n",
-			__func__, errstr);
+		printk(KERN_ERR "%s: errstr :%s: not found\n", __func__,
+		       errstr);
 		errno = 1;
 	}
 
diff -puN net/9p/fcprint.c~revert-git-v9fs net/9p/fcprint.c
--- a/net/9p/fcprint.c~revert-git-v9fs
+++ a/net/9p/fcprint.c
@@ -142,14 +142,6 @@ p9_printdata(char *buf, int buflen, u8 *
 	return p9_dumpdata(buf, buflen, data, datalen < 16?datalen:16);
 }
 
-/**
- * p9_printfcall - decode and print a protocol structure into a buffer
- * @buf: buffer to deposit decoded structure into
- * @buflen: available space in buffer
- * @fc: protocol rpc structure of type &p9_fcall
- * @extended: whether or not session is operating with extended protocol
- */
-
 int
 p9_printfcall(char *buf, int buflen, struct p9_fcall *fc, int extended)
 {
diff -puN net/9p/mod.c~revert-git-v9fs net/9p/mod.c
--- a/net/9p/mod.c~revert-git-v9fs
+++ a/net/9p/mod.c
@@ -39,6 +39,9 @@ module_param_named(debug, p9_debug_level
 MODULE_PARM_DESC(debug, "9P debugging level");
 #endif
 
+extern int p9_mux_global_init(void);
+extern void p9_mux_global_exit(void);
+
 /*
  * Dynamic Transport Registration Routines
  *
@@ -49,7 +52,7 @@ static struct p9_trans_module *v9fs_defa
 
 /**
  * v9fs_register_trans - register a new transport with 9p
- * @m: structure describing the transport module and entry points
+ * @m - structure describing the transport module and entry points
  *
  */
 void v9fs_register_trans(struct p9_trans_module *m)
@@ -62,7 +65,7 @@ EXPORT_SYMBOL(v9fs_register_trans);
 
 /**
  * v9fs_match_trans - match transport versus registered transports
- * @name: string identifying transport
+ * @arg: string identifying transport
  *
  */
 struct p9_trans_module *v9fs_match_trans(const substring_t *name)
diff -puN net/9p/trans_fd.c~revert-git-v9fs net/9p/trans_fd.c
--- a/net/9p/trans_fd.c~revert-git-v9fs
+++ a/net/9p/trans_fd.c
@@ -47,29 +47,12 @@
 #define SCHED_TIMEOUT	10
 #define MAXPOLLWADDR	2
 
-/**
- * struct p9_fd_opts - per-transport options
- * @rfd: file descriptor for reading (trans=fd)
- * @wfd: file descriptor for writing (trans=fd)
- * @port: port to connect to (trans=tcp)
- *
- */
-
 struct p9_fd_opts {
 	int rfd;
 	int wfd;
 	u16 port;
 };
 
-
-/**
- * struct p9_trans_fd - transport state
- * @rd: reference to file to read from
- * @wr: reference of file to write to
- * @conn: connection state reference
- *
- */
-
 struct p9_trans_fd {
 	struct file *rd;
 	struct file *wr;
@@ -107,24 +90,10 @@ enum {
 };
 
 struct p9_req;
-typedef void (*p9_conn_req_callback)(struct p9_req *req, void *a);
-
-/**
- * struct p9_req - fd mux encoding of an rpc transaction
- * @lock: protects req_list
- * @tag: numeric tag for rpc transaction
- * @tcall: request &p9_fcall structure
- * @rcall: response &p9_fcall structure
- * @err: error state
- * @cb: callback for when response is received
- * @cba: argument to pass to callback
- * @flush: flag to indicate RPC has been flushed
- * @req_list: list link for higher level objects to chain requests
- *
- */
 
+typedef void (*p9_conn_req_callback)(struct p9_req *req, void *a);
 struct p9_req {
-	spinlock_t lock;
+	spinlock_t lock; /* protect request structure */
 	int tag;
 	struct p9_fcall *tcall;
 	struct p9_fcall *rcall;
@@ -135,39 +104,7 @@ struct p9_req {
 	struct list_head req_list;
 };
 
-struct p9_mux_poll_task {
-	struct task_struct *task;
-	struct list_head mux_list;
-	int muxnum;
-};
-
-/**
- * struct p9_conn - fd mux connection state information
- * @lock: protects mux_list (?)
- * @mux_list: list link for mux to manage multiple connections (?)
- * @poll_task: task polling on this connection
- * @msize: maximum size for connection (dup)
- * @extended: 9p2000.u flag (dup)
- * @trans: reference to transport instance for this connection
- * @tagpool: id accounting for transactions
- * @err: error state
- * @equeue: event wait_q (?)
- * @req_list: accounting for requests which have been sent
- * @unsent_req_list: accounting for requests that haven't been sent
- * @rcall: current response &p9_fcall structure
- * @rpos: read position in current frame
- * @rbuf: current read buffer
- * @wpos: write position for current frame
- * @wsize: amount of data to write for current frame
- * @wbuf: current write buffer
- * @poll_wait: array of wait_q's for various worker threads
- * @poll_waddr: ????
- * @pt: poll state
- * @rq: current read work
- * @wq: current write work
- * @wsched: ????
- *
- */
+struct p9_mux_poll_task;
 
 struct p9_conn {
 	spinlock_t lock; /* protect lock structure */
@@ -195,16 +132,11 @@ struct p9_conn {
 	unsigned long wsched;
 };
 
-/**
- * struct p9_mux_rpc - fd mux rpc accounting structure
- * @m: connection this request was issued on
- * @err: error state
- * @tcall: request &p9_fcall
- * @rcall: response &p9_fcall
- * @wqueue: wait queue that client is blocked on for this rpc
- *
- * Bug: isn't this information duplicated elsewhere like &p9_req
- */
+struct p9_mux_poll_task {
+	struct task_struct *task;
+	struct list_head mux_list;
+	int muxnum;
+};
 
 struct p9_mux_rpc {
 	struct p9_conn *m;
@@ -275,12 +207,10 @@ static void p9_mux_put_tag(struct p9_con
 
 /**
  * p9_mux_calc_poll_procs - calculates the number of polling procs
- * @muxnum: number of mounts
+ * based on the number of mounted v9fs filesystems.
  *
- * Calculation is based on the number of mounted v9fs filesystems.
  * The current implementation returns sqrt of the number of mounts.
  */
-
 static int p9_mux_calc_poll_procs(int muxnum)
 {
 	int n;
@@ -401,11 +331,12 @@ static void p9_mux_poll_stop(struct p9_c
 
 /**
  * p9_conn_create - allocate and initialize the per-session mux data
- * @trans: transport structure
+ * Creates the polling task if this is the first session.
  *
- * Note: Creates the polling task if this is the first session.
+ * @trans - transport structure
+ * @msize - maximum message size
+ * @extended - extended flag
  */
-
 static struct p9_conn *p9_conn_create(struct p9_trans *trans)
 {
 	int i, n;
@@ -475,10 +406,7 @@ static struct p9_conn *p9_conn_create(st
 
 /**
  * p9_mux_destroy - cancels all pending requests and frees mux resources
- * @m: mux to destroy
- *
  */
-
 static void p9_conn_destroy(struct p9_conn *m)
 {
 	P9_DPRINTK(P9_DEBUG_MUX, "mux %p prev %p next %p\n", m,
@@ -501,14 +429,9 @@ static void p9_conn_destroy(struct p9_co
 }
 
 /**
- * p9_pollwait - add poll task to the wait queue
- * @filp: file pointer being polled
- * @wait_address: wait_q to block on
- * @p: poll state
- *
- * called by files poll operation to add v9fs-poll task to files wait queue
+ * p9_pollwait - called by files poll operation to add v9fs-poll task
+ * 	to files wait queue
  */
-
 static void
 p9_pollwait(struct file *filp, wait_queue_head_t *wait_address, poll_table *p)
 {
@@ -539,10 +462,7 @@ p9_pollwait(struct file *filp, wait_queu
 
 /**
  * p9_poll_mux - polls a mux and schedules read or write works if necessary
- * @m: connection to poll
- *
  */
-
 static void p9_poll_mux(struct p9_conn *m)
 {
 	int n;
@@ -579,14 +499,9 @@ static void p9_poll_mux(struct p9_conn *
 }
 
 /**
- * p9_poll_proc - poll worker thread
- * @a: thread state and arguments
- *
- * polls all v9fs transports for new events and queues the appropriate
- * work to the work queue
- *
+ * p9_poll_proc - polls all v9fs transports for new events and queues
+ * 	the appropriate work to the work queue
  */
-
 static int p9_poll_proc(void *a)
 {
 	struct p9_conn *m, *mtmp;
@@ -612,10 +527,7 @@ static int p9_poll_proc(void *a)
 
 /**
  * p9_write_work - called when a transport can send some data
- * @work: container for work to be done
- *
  */
-
 static void p9_write_work(struct work_struct *work)
 {
 	int n, err;
@@ -726,10 +638,7 @@ static void process_request(struct p9_co
 
 /**
  * p9_read_work - called when there is some data to be read from a transport
- * @work: container of work to be done
- *
  */
-
 static void p9_read_work(struct work_struct *work)
 {
 	int n, err;
@@ -884,9 +793,7 @@ error:
  * @tc: request to be sent
  * @cb: callback function to call when response is received
  * @cba: parameter to pass to the callback function
- *
  */
-
 static struct p9_req *p9_send_request(struct p9_conn *m,
 					  struct p9_fcall *tc,
 					  p9_conn_req_callback cb, void *cba)
@@ -1054,12 +961,10 @@ p9_conn_rpc_cb(struct p9_req *req, void 
 /**
  * p9_fd_rpc- sends 9P request and waits until a response is available.
  *	The function can be interrupted.
- * @t: transport data
+ * @m: mux data
  * @tc: request to be sent
  * @rc: pointer where a pointer to the response is stored
- *
  */
-
 int
 p9_fd_rpc(struct p9_trans *t, struct p9_fcall *tc, struct p9_fcall **rc)
 {
@@ -1136,10 +1041,8 @@ p9_fd_rpc(struct p9_trans *t, struct p9_
  * @m: mux data
  * @tc: request to be sent
  * @cb: callback function to be called when response arrives
- * @a: value to pass to the callback function
- *
+ * @cba: value to pass to the callback function
  */
-
 int p9_conn_rpcnb(struct p9_conn *m, struct p9_fcall *tc,
 		   p9_conn_req_callback cb, void *a)
 {
@@ -1162,9 +1065,7 @@ int p9_conn_rpcnb(struct p9_conn *m, str
  * p9_conn_cancel - cancel all pending requests with error
  * @m: mux data
  * @err: error code
- *
  */
-
 void p9_conn_cancel(struct p9_conn *m, int err)
 {
 	struct p9_req *req, *rtmp;
@@ -1196,46 +1097,35 @@ void p9_conn_cancel(struct p9_conn *m, i
 }
 
 /**
- * parse_options - parse mount options into session structure
+ * v9fs_parse_options - parse mount options into session structure
  * @options: options string passed from mount
- * @opts: transport-specific structure to parse options into
+ * @v9ses: existing v9fs session information
  *
- * Returns 0 upon success, -ERRNO upon failure
  */
 
-static int parse_opts(char *params, struct p9_fd_opts *opts)
+static void parse_opts(char *options, struct p9_fd_opts *opts)
 {
 	char *p;
 	substring_t args[MAX_OPT_ARGS];
 	int option;
-	char *options;
 	int ret;
 
 	opts->port = P9_PORT;
 	opts->rfd = ~0;
 	opts->wfd = ~0;
 
-	if (!params)
-		return 0;
-
-	options = kstrdup(params, GFP_KERNEL);
-	if (!options) {
-		P9_DPRINTK(P9_DEBUG_ERROR,
-				"failed to allocate copy of option string\n");
-		return -ENOMEM;
-	}
+	if (!options)
+		return;
 
 	while ((p = strsep(&options, ",")) != NULL) {
 		int token;
-		int r;
 		if (!*p)
 			continue;
 		token = match_token(p, tokens, args);
-		r = match_int(&args[0], &option);
-		if (r < 0) {
+		ret = match_int(&args[0], &option);
+		if (ret < 0) {
 			P9_DPRINTK(P9_DEBUG_ERROR,
 			 "integer field, but no integer?\n");
-			ret = r;
 			continue;
 		}
 		switch (token) {
@@ -1252,8 +1142,6 @@ static int parse_opts(char *params, stru
 			continue;
 		}
 	}
-	kfree(options);
-	return 0;
 }
 
 static int p9_fd_open(struct p9_trans *trans, int rfd, int wfd)
@@ -1305,12 +1193,11 @@ static int p9_socket_open(struct p9_tran
 
 /**
  * p9_fd_read- read from a fd
- * @trans: transport instance state
+ * @v9ses: session information
  * @v: buffer to receive data into
  * @len: size of receive buffer
  *
  */
-
 static int p9_fd_read(struct p9_trans *trans, void *v, int len)
 {
 	int ret;
@@ -1333,12 +1220,11 @@ static int p9_fd_read(struct p9_trans *t
 
 /**
  * p9_fd_write - write to a socket
- * @trans: transport instance state
+ * @v9ses: session information
  * @v: buffer to send data from
  * @len: size of send buffer
  *
  */
-
 static int p9_fd_write(struct p9_trans *trans, void *v, int len)
 {
 	int ret;
@@ -1410,7 +1296,6 @@ end:
  * @trans: private socket structure
  *
  */
-
 static void p9_fd_close(struct p9_trans *trans)
 {
 	struct p9_trans_fd *ts;
@@ -1433,23 +1318,6 @@ static void p9_fd_close(struct p9_trans 
 	kfree(ts);
 }
 
-/*
- * stolen from NFS - maybe should be made a generic function?
- */
-static inline int valid_ipaddr4(const char *buf)
-{
-	int rc, count, in[4];
-
-	rc = sscanf(buf, "%d.%d.%d.%d", &in[0], &in[1], &in[2], &in[3]);
-	if (rc != 4)
-		return -EINVAL;
-	for (count = 0; count < 4; count++) {
-		if (in[count] > 255)
-			return -EINVAL;
-	}
-	return 0;
-}
-
 static struct p9_trans *
 p9_trans_create_tcp(const char *addr, char *args, int msize, unsigned char dotu)
 {
@@ -1460,12 +1328,7 @@ p9_trans_create_tcp(const char *addr, ch
 	struct p9_fd_opts opts;
 	struct p9_trans_fd *p;
 
-	err = parse_opts(args, &opts);
-	if (err < 0)
-		return ERR_PTR(err);
-
-	if (valid_ipaddr4(addr) < 0)
-		return ERR_PTR(-EINVAL);
+	parse_opts(args, &opts);
 
 	csocket = NULL;
 	trans = kmalloc(sizeof(struct p9_trans), GFP_KERNEL);
diff -puN net/9p/trans_virtio.c~revert-git-v9fs net/9p/trans_virtio.c
--- a/net/9p/trans_virtio.c~revert-git-v9fs
+++ a/net/9p/trans_virtio.c
@@ -49,75 +49,29 @@
 #define VIRTQUEUE_NUM	128
 
 /* a single mutex to manage channel initialization and attachment */
-static DEFINE_MUTEX(virtio_9p_lock);
+static DECLARE_MUTEX(virtio_9p_lock);
 /* global which tracks highest initialized channel */
 static int chan_index;
 
 #define P9_INIT_MAXTAG	16
 
-
-/**
- * enum p9_req_status_t - virtio request status
- * @REQ_STATUS_IDLE: request slot unused
- * @REQ_STATUS_SENT: request sent to server
- * @REQ_STATUS_RCVD: response received from server
- * @REQ_STATUS_FLSH: request has been flushed
- *
- * The @REQ_STATUS_IDLE state is used to mark a request slot as unused
- * but use is actually tracked by the idpool structure which handles tag
- * id allocation.
- *
- */
-
-enum p9_req_status_t {
-	REQ_STATUS_IDLE,
-	REQ_STATUS_SENT,
-	REQ_STATUS_RCVD,
-	REQ_STATUS_FLSH,
-};
-
-/**
- * struct p9_req_t - virtio request slots
- * @status: status of this request slot
- * @wq: wait_queue for the client to block on for this request
- *
- * The virtio transport uses an array to track outstanding requests
- * instead of a list.  While this may incurr overhead during initial
- * allocation or expansion, it makes request lookup much easier as the
- * tag id is a index into an array.  (We use tag+1 so that we can accomodate
- * the -1 tag for the T_VERSION request).
- * This also has the nice effect of only having to allocate wait_queues
- * once, instead of constantly allocating and freeing them.  Its possible
- * other resources could benefit from this scheme as well.
- *
- */
+#define REQ_STATUS_IDLE	0
+#define REQ_STATUS_SENT 1
+#define REQ_STATUS_RCVD 2
+#define REQ_STATUS_FLSH 3
 
 struct p9_req_t {
 	int status;
 	wait_queue_head_t *wq;
 };
 
-/**
- * struct virtio_chan - per-instance transport information
- * @initialized: whether the channel is initialized
- * @inuse: whether the channel is in use
- * @lock: protects multiple elements within this structure
- * @vdev: virtio dev associated with this channel
- * @vq: virtio queue associated with this channel
- * @tagpool: accounting for tag ids (and request slots)
- * @reqs: array of request slots
- * @max_tag: current number of request_slots allocated
- * @sg: scatter gather list which is used to pack a request (protected?)
- *
- * We keep all per-channel information in a structure.
+/* We keep all per-channel information in a structure.
  * This structure is allocated within the devices dev->mem space.
  * A pointer to the structure will get put in the transport private.
- *
  */
-
 static struct virtio_chan {
-	bool initialized;
-	bool inuse;
+	bool initialized;		/* channel is initialized */
+	bool inuse;			/* channel is in use */
 
 	spinlock_t lock;
 
@@ -132,19 +86,7 @@ static struct virtio_chan {
 	struct scatterlist sg[VIRTQUEUE_NUM];
 } channels[MAX_9P_CHAN];
 
-/**
- * p9_lookup_tag - Lookup requests by tag
- * @c: virtio channel to lookup tag within
- * @tag: numeric id for transaction
- *
- * this is a simple array lookup, but will grow the
- * request_slots as necessary to accomodate transaction
- * ids which did not previously have a slot.
- *
- * Bugs: there is currently no upper limit on request slots set
- * here, but that should be constrained by the id accounting.
- */
-
+/* Lookup requests by tag */
 static struct p9_req_t *p9_lookup_tag(struct virtio_chan *c, u16 tag)
 {
 	/* This looks up the original request by tag so we know which
@@ -188,20 +130,11 @@ static unsigned int rest_of_page(void *d
 	return PAGE_SIZE - ((unsigned long)data % PAGE_SIZE);
 }
 
-/**
- * p9_virtio_close - reclaim resources of a channel
- * @trans: transport state
- *
- * This reclaims a channel by freeing its resources and
- * reseting its inuse flag.
- *
- */
-
 static void p9_virtio_close(struct p9_trans *trans)
 {
 	struct virtio_chan *chan = trans->priv;
 	int count;
-	unsigned long flags;
+	unsigned int flags;
 
 	spin_lock_irqsave(&chan->lock, flags);
 	p9_idpool_destroy(chan->tagpool);
@@ -211,26 +144,13 @@ static void p9_virtio_close(struct p9_tr
 	chan->max_tag = 0;
 	spin_unlock_irqrestore(&chan->lock, flags);
 
-	mutex_lock(&virtio_9p_lock);
+	down(&virtio_9p_lock);
 	chan->inuse = false;
-	mutex_unlock(&virtio_9p_lock);
+	up(&virtio_9p_lock);
 
 	kfree(trans);
 }
 
-/**
- * req_done - callback which signals activity from the server
- * @vq: virtio queue activity was received on
- *
- * This notifies us that the server has triggered some activity
- * on the virtio channel - most likely a response to request we
- * sent.  Figure out which requests now have responses and wake up
- * those threads.
- *
- * Bugs: could do with some additional sanity checking, but appears to work.
- *
- */
-
 static void req_done(struct virtqueue *vq)
 {
 	struct virtio_chan *chan = vq->vdev->priv;
@@ -249,20 +169,6 @@ static void req_done(struct virtqueue *v
 	spin_unlock_irqrestore(&chan->lock, flags);
 }
 
-/**
- * pack_sg_list - pack a scatter gather list from a linear buffer
- * @sg: scatter/gather list to pack into
- * @start: which segment of the sg_list to start at
- * @limit: maximum segment to pack data to
- * @data: data to pack into scatter/gather list
- * @count: amount of data to pack into the scatter/gather list
- *
- * sg_lists have multiple segments of various sizes.  This will pack
- * arbitrary data into an existing scatter gather list, segmenting the
- * data as necessary within constraints.
- *
- */
-
 static int
 pack_sg_list(struct scatterlist *sg, int start, int limit, char *data,
 								int count)
@@ -283,14 +189,6 @@ pack_sg_list(struct scatterlist *sg, int
 	return index-start;
 }
 
-/**
- * p9_virtio_rpc - issue a request and wait for a response
- * @t: transport state
- * @tc: &p9_fcall request to transmit
- * @rc: &p9_fcall to put reponse into
- *
- */
-
 static int
 p9_virtio_rpc(struct p9_trans *t, struct p9_fcall *tc, struct p9_fcall **rc)
 {
@@ -365,26 +263,16 @@ p9_virtio_rpc(struct p9_trans *t, struct
 	return 0;
 }
 
-/**
- * p9_virtio_probe - probe for existence of 9P virtio channels
- * @vdev: virtio device to probe
- *
- * This probes for existing virtio channels.  At present only
- * a single channel is in use, so in the future more work may need
- * to be done here.
- *
- */
-
 static int p9_virtio_probe(struct virtio_device *vdev)
 {
 	int err;
 	struct virtio_chan *chan;
 	int index;
 
-	mutex_lock(&virtio_9p_lock);
+	down(&virtio_9p_lock);
 	index = chan_index++;
 	chan = &channels[index];
-	mutex_unlock(&virtio_9p_lock);
+	up(&virtio_9p_lock);
 
 	if (chan_index > MAX_9P_CHAN) {
 		printk(KERN_ERR "9p: virtio: Maximum channels exceeded\n");
@@ -413,34 +301,17 @@ static int p9_virtio_probe(struct virtio
 out_free_vq:
 	vdev->config->del_vq(chan->vq);
 fail:
-	mutex_lock(&virtio_9p_lock);
+	down(&virtio_9p_lock);
 	chan_index--;
-	mutex_unlock(&virtio_9p_lock);
+	up(&virtio_9p_lock);
 	return err;
 }
 
-
-/**
- * p9_virtio_create - allocate a new virtio channel
- * @devname: string identifying the channel to connect to (unused)
- * @args: args passed from sys_mount() for per-transport options (unused)
- * @msize: requested maximum packet size
- * @extended: 9p2000.u enabled flag
- *
- * This sets up a transport channel for 9p communication.  Right now
+/* This sets up a transport channel for 9p communication.  Right now
  * we only match the first available channel, but eventually we couldlook up
  * alternate channels by matching devname versus a virtio_config entry.
  * We use a simple reference count mechanism to ensure that only a single
- * mount has a channel open at a time.
- *
- * Bugs: doesn't allow identification of a specific channel
- * to allocate, channels are allocated sequentially. This was
- * a pragmatic decision to get things rolling, but ideally some
- * way of identifying the channel to attach to would be nice
- * if we are going to support multiple channels.
- *
- */
-
+ * mount has a channel open at a time. */
 static struct p9_trans *
 p9_virtio_create(const char *devname, char *args, int msize,
 							unsigned char extended)
@@ -449,7 +320,7 @@ p9_virtio_create(const char *devname, ch
 	struct virtio_chan *chan = channels;
 	int index = 0;
 
-	mutex_lock(&virtio_9p_lock);
+	down(&virtio_9p_lock);
 	while (index < MAX_9P_CHAN) {
 		if (chan->initialized && !chan->inuse) {
 			chan->inuse = true;
@@ -459,7 +330,7 @@ p9_virtio_create(const char *devname, ch
 			chan = &channels[index];
 		}
 	}
-	mutex_unlock(&virtio_9p_lock);
+	up(&virtio_9p_lock);
 
 	if (index >= MAX_9P_CHAN) {
 		printk(KERN_ERR "9p: no channels available\n");
@@ -489,12 +360,6 @@ p9_virtio_create(const char *devname, ch
 	return trans;
 }
 
-/**
- * p9_virtio_remove - clean up resources associated with a virtio device
- * @vdev: virtio device to remove
- *
- */
-
 static void p9_virtio_remove(struct virtio_device *vdev)
 {
 	struct virtio_chan *chan = vdev->priv;
diff -puN net/9p/util.c~revert-git-v9fs net/9p/util.c
--- a/net/9p/util.c~revert-git-v9fs
+++ a/net/9p/util.c
@@ -32,23 +32,11 @@
 #include <linux/idr.h>
 #include <net/9p/9p.h>
 
-/**
- * struct p9_idpool - per-connection accounting for tag idpool
- * @lock: protects the pool
- * @pool: idr to allocate tag id from
- *
- */
-
 struct p9_idpool {
 	spinlock_t lock;
 	struct idr pool;
 };
 
-/**
- * p9_idpool_create - create a new per-connection id pool
- *
- */
-
 struct p9_idpool *p9_idpool_create(void)
 {
 	struct p9_idpool *p;
@@ -64,11 +52,6 @@ struct p9_idpool *p9_idpool_create(void)
 }
 EXPORT_SYMBOL(p9_idpool_create);
 
-/**
- * p9_idpool_destroy - create a new per-connection id pool
- * @p: idpool to destory
- */
-
 void p9_idpool_destroy(struct p9_idpool *p)
 {
 	idr_destroy(&p->pool);
@@ -78,9 +61,9 @@ EXPORT_SYMBOL(p9_idpool_destroy);
 
 /**
  * p9_idpool_get - allocate numeric id from pool
- * @p: pool to allocate from
+ * @p - pool to allocate from
  *
- * Bugs: This seems to be an awful generic function, should it be in idr.c with
+ * XXX - This seems to be an awful generic function, should it be in idr.c with
  *            the lock included in struct idr?
  */
 
@@ -88,7 +71,7 @@ int p9_idpool_get(struct p9_idpool *p)
 {
 	int i = 0;
 	int error;
-	unsigned long flags;
+	unsigned int flags;
 
 retry:
 	if (idr_pre_get(&p->pool, GFP_KERNEL) == 0)
@@ -111,16 +94,15 @@ EXPORT_SYMBOL(p9_idpool_get);
 
 /**
  * p9_idpool_put - release numeric id from pool
- * @id: numeric id which is being released
- * @p: pool to release id into
+ * @p - pool to allocate from
  *
- * Bugs: This seems to be an awful generic function, should it be in idr.c with
+ * XXX - This seems to be an awful generic function, should it be in idr.c with
  *            the lock included in struct idr?
  */
 
 void p9_idpool_put(int id, struct p9_idpool *p)
 {
-	unsigned long flags;
+	unsigned int flags;
 	spin_lock_irqsave(&p->lock, flags);
 	idr_remove(&p->pool, id);
 	spin_unlock_irqrestore(&p->lock, flags);
@@ -129,13 +111,11 @@ EXPORT_SYMBOL(p9_idpool_put);
 
 /**
  * p9_idpool_check - check if the specified id is available
- * @id: id to check
- * @p: pool to check
+ * @id - id to check
+ * @p - pool
  */
-
 int p9_idpool_check(int id, struct p9_idpool *p)
 {
 	return idr_find(&p->pool, id) != NULL;
 }
 EXPORT_SYMBOL(p9_idpool_check);
-
_

Patches currently in -mm which might be from akpm@xxxxxxxxxxxxxxxxxxxx are

origin.patch
sxc-fix-printk-warnings-on-sparc32.patch
drivers-scsi-dpt_i2oc-fix-build-on-alpha.patch
quota-dont-call-sync_fs-from-vfs_quota_off-when-theres-no-quota-turn-off-fix.patch
fix-hfsplus-oops-on-image-without-extents-fix.patch
rtc-rtc_time_to_tm-use-unsigned-arithmetic-fix.patch
atmel_lcdfb-fix-pixclok-divider-calculation-checkpatch-fixes.patch
memcg-fix-possible-panic-when-config_mm_owner=y-checkpatch-fixes.patch
linux-next.patch
revert-9p-convert-from-semaphore-to-spinlock.patch
revert-vt-fix-background-color-on-line-feed.patch
revert-lxfb-extend-pll-table-to-support-dotclocks-below-25-mhz.patch
revert-acpica-fixes-for-unload-and-ddbhandles.patch
acpi-enable-c3-power-state-on-dell-inspiron-8200.patch
acpi-video-balcklist-fujitsu-lifebook-s6410.patch
git-x86.patch
git-x86-fixup.patch
arch-x86-kernel-setupc-printk-warning-fix.patch
arm-omap1-n770-convert-audio_pwr_sem-in-a-mutex-fix.patch
cifs-suppress-warning.patch
sysfs-provide-a-clue-about-the-effects-of-config_usb_device_class=y.patch
fix-driver-core-prepare-for-removal-of-20-char-limit-from-struct-device.patch
i2c-renesas-highlander-fpga-smbus-support.patch
ibmaem-new-driver-for-power-energy-temp-meters-in-ibm-system-x-hardware-fix.patch
dlm-convert-connections_lock-in-a-mutex-fix.patch
git-input.patch
git-jg-misc-git-rejects.patch
revert-git-kbuild.patch
git-mmc.patch
sundance-set-carrier-status-on-link-change-events.patch
dm9000-use-delayed-work-to-update-mii-phy-state-fix.patch
pcnet32-fix-warning.patch
update-smc91x-driver-with-arm-versatile-board-info.patch
git-battery.patch
fs-nfs-callback_xdrc-suppress-uninitialiized-variable-warnings.patch
arch-parisc-kernel-unalignedc-use-time_-macros.patch
revert-git-block.patch
git-unionfs.patch
git-unionfs-fixup.patch
unionfs-broke.patch
git-logfs-fixup.patch
logfs-unbork.patch
logfs-is-busted.patch
drivers-usb-core-sysfsc-fix-types.patch
drivers-uwb-nehc-processor-flags-have-type-unsigned-long.patch
drivers-usb-host-isp1760-hcdc-procesxor-flags-have-type-unsigned-long.patch
git-v9fs.patch
revert-git-v9fs.patch
git-watchdog.patch
git-watchdog-git-rejects.patch
watchdog-fix-booke_wdtc-on-mpc85xx-smp-system.patch
xfs-suppress-uninitialized-var-warnings.patch
git-xtensa.patch
ext4-is-busted-on-m68k.patch
common-implementation-of-iterative-div-mod-fix.patch
common-implementation-of-iterative-div-mod-checkpatch-fixes.patch
colibri-fix-support-for-dm9000-ethernet-device-fix.patch
vmscan-give-referenced-active-and-unmapped-pages-a-second-trip-around-the-lru.patch
vm-dont-run-touch_buffer-during-buffercache-lookups.patch
locking-add-typecheck-on-irqsave-and-friends-for-correct-flags-checkpatch-fixes.patch
remove-apparently-unused-fd1772h-header-file.patch
lib-allow-memparse-to-accept-a-null-and-ignorable-second-parm-checkpatch-fixes.patch
rename-warn-to-warning-to-clear-the-namespace-fix.patch
add-a-warn-macro-this-is-warn_on-printk-arguments-fix.patch
flag-parameters-paccept-fix.patch
flag-parameters-anon_inode_getfd-extension-fix.patch
flag-parameters-inotify_init-fix.patch
hysdn-no-longer-broken-on-smp.patch
drivers-video-aty-radeon_basec-notify-user-if-sysfs_create_bin_file-failed-checkpatch-fixes.patch
reiserfs-convert-j_commit_lock-to-mutex-checkpatch-fixes.patch
documentation-build-source-files-in-documentation-sub-dir-disable.patch
reiser4.patch
reiser4-semaphore-fix.patch
page-owner-tracking-leak-detector.patch
nr_blockdev_pages-in_interrupt-warning.patch
slab-leaks3-default-y.patch
put_bh-debug.patch
shrink_slab-handle-bad-shrinkers.patch
getblk-handle-2tb-devices.patch
getblk-handle-2tb-devices-fix.patch
undeprecate-pci_find_device.patch
notify_change-callers-must-hold-i_mutex.patch
profile-likely-unlikely-macros.patch
drivers-net-bonding-bond_sysfsc-suppress-uninitialized-var-warning.patch
w1-build-fix.patch

--
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux