summary refs log tree commit diff
path: root/net/9p
diff options
context:
space:
mode:
authorEric Van Hensbergen <ericvh@ericvh-laptop.(none)>2007-10-17 14:31:07 -0500
committerEric Van Hensbergen <ericvh@ericvh-desktop.austin.ibm.com>2007-10-17 14:31:07 -0500
commitfb0466c3ae7f1c73f70072af8fd27ac166908a2f (patch)
tree24af82c397d1f155bded80f3fcb49849da28bcc9 /net/9p
parent50fd8010673b770f6489c9ee96680c204aefa84a (diff)
downloadlinux-fb0466c3ae7f1c73f70072af8fd27ac166908a2f.tar.gz
9p: fix bad kconfig cross-dependency
This patch moves transport dynamic registration and matching to the net
module to prevent a bad Kconfig dependency between the net and fs 9p modules.

Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>

Diffstat (limited to 'net/9p')
-rw-r--r--net/9p/client.c1
-rw-r--r--net/9p/mod.c62
-rw-r--r--net/9p/mux.c1
3 files changed, 64 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c
index d83cc1247f1e..af9199364049 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -30,6 +30,7 @@
 #include <linux/sched.h>
 #include <linux/uaccess.h>
 #include <net/9p/9p.h>
+#include <linux/parser.h>
 #include <net/9p/transport.h>
 #include <net/9p/conn.h>
 #include <net/9p/client.h>
diff --git a/net/9p/mod.c b/net/9p/mod.c
index 4f9e1d2ac257..b8ac0635ad83 100644
--- a/net/9p/mod.c
+++ b/net/9p/mod.c
@@ -27,6 +27,10 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <net/9p/9p.h>
+#include <linux/fs.h>
+#include <linux/parser.h>
+#include <net/9p/transport.h>
+#include <linux/list.h>
 
 #ifdef CONFIG_NET_9P_DEBUG
 unsigned int p9_debug_level = 0;	/* feature-rific global debug level  */
@@ -40,6 +44,64 @@ extern void p9_mux_global_exit(void);
 extern int p9_sysctl_register(void);
 extern void p9_sysctl_unregister(void);
 
+/*
+ * Dynamic Transport Registration Routines
+ *
+ */
+
+static LIST_HEAD(v9fs_trans_list);
+static struct p9_trans_module *v9fs_default_transport;
+
+/**
+ * v9fs_register_trans - register a new transport with 9p
+ * @m - structure describing the transport module and entry points
+ *
+ */
+void v9fs_register_trans(struct p9_trans_module *m)
+{
+	list_add_tail(&m->list, &v9fs_trans_list);
+	if (m->def)
+		v9fs_default_transport = m;
+}
+EXPORT_SYMBOL(v9fs_register_trans);
+
+/**
+ * v9fs_match_trans - match transport versus registered transports
+ * @arg: string identifying transport
+ *
+ */
+struct p9_trans_module *v9fs_match_trans(const substring_t *name)
+{
+	struct list_head *p;
+	struct p9_trans_module *t = NULL;
+
+	list_for_each(p, &v9fs_trans_list) {
+		t = list_entry(p, struct p9_trans_module, list);
+		if (strncmp(t->name, name->from, name->to-name->from) == 0)
+			break;
+	}
+	return t;
+}
+EXPORT_SYMBOL(v9fs_match_trans);
+
+/**
+ * v9fs_default_trans - returns pointer to default transport
+ *
+ */
+
+struct p9_trans_module *v9fs_default_trans(void)
+{
+	if (v9fs_default_transport)
+		return v9fs_default_transport;
+	else if (!list_empty(&v9fs_trans_list))
+		return list_first_entry(&v9fs_trans_list,
+					struct p9_trans_module, list);
+	else
+		return NULL;
+}
+EXPORT_SYMBOL(v9fs_default_trans);
+
+
 /**
  * v9fs_init - Initialize module
  *
diff --git a/net/9p/mux.c b/net/9p/mux.c
index 934e2ea86e2c..f14014793bed 100644
--- a/net/9p/mux.c
+++ b/net/9p/mux.c
@@ -31,6 +31,7 @@
 #include <linux/idr.h>
 #include <linux/mutex.h>
 #include <net/9p/9p.h>
+#include <linux/parser.h>
 #include <net/9p/transport.h>
 #include <net/9p/conn.h>