[PATCH 4/10] 9p: tranport interface changes for in-kernel server

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

 



This patch adds in-kernel 9P server support to the transport interface.

Signed-off-by: Latchesar Ionkov <lucho@xxxxxxxxxx>

---
 fs/9p/v9fs.c               |    2 +-
 include/net/9p/transport.h |   31 ++++++++++++++++++++++++++++---
 net/9p/mux.c               |    6 +++---
 3 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c
index eeca7c7..c8bc530 100644
--- a/fs/9p/v9fs.c
+++ b/fs/9p/v9fs.c
@@ -210,7 +210,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
 		goto error;
 	}
 
-	trans = v9ses->trans->create(dev_name, v9ses->options);
+	trans = v9ses->trans->create_client(dev_name, v9ses->options);
 	if (IS_ERR(trans)) {
 		retval = PTR_ERR(trans);
 		trans = NULL;
diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h
index b8eecc9..785595a 100644
--- a/include/net/9p/transport.h
+++ b/include/net/9p/transport.h
@@ -47,23 +47,48 @@ struct p9_trans {
 	void *aux;
 	void *priv;	/* transport specific */
 
-	/* The function schedules sending the data from the 'tc'
+	/* If client, the function schedules sending the data from the 'tc'
 	   over the transport. If the 'rc' is set, the response is
 	   read in it and the 'cb' is called.
+
+	   If server, when a request arrives p9_trans_req is allocated and
+	   the request content is stored in 'tc'. The transport sets 'cb'
+	   and 'cba' values. The server stores the response in the 'rc'
+	   fcall (or allocates one if NULL) and calls 'cb'.
+	   The server is responsible of freeing the req as well as req->tc
+	   and req->rc once the response is sent.
+	   The transport is allowed to call the request function with NULL
+	   value for 'req' if it's status ('err') is changed.
 	*/
 	void (*request)(struct p9_trans *trans, struct p9_trans_req *req);
 
-	/* If the request is not sent down the wire, don't send it. */
+	/* If client and the request is not sent down the wire, don't send it.
+	   If server, inform the transport that the server won't respond to
+	   that request. Returns error code, zero if successful.
+	*/
 	int (*cancel)(struct p9_trans *trans, struct p9_trans_req *req);
 	void (*destroy)(struct p9_trans *trans);
 };
 
+struct p9_trans_listener {
+	int err;
+	void *taux;	/* transport specific */
+	void *aux;	/* user set */
+
+	/* The newtrans callback is set by the user of the listener
+	   When there is a new incoming connection, newcann is called
+	   with p9_trans that represents it */
+	void (*newtrans)(struct p9_trans_listener *, struct p9_trans *);
+	void (*destroy)(struct p9_trans_listener *);
+};
+
 struct p9_trans_module {
 	struct list_head list;
 	char *name;		/* name of transport */
 	int maxsize;		/* max message size of transport */
 	int def;		/* this transport should be default */
-	struct p9_trans * (*create)(const char *devname, char *options);
+	struct p9_trans *(*create_client)(const char *devname, char *options);
+	struct p9_trans_listener *(*create_listener)(char *options);
 };
 
 void v9fs_register_trans(struct p9_trans_module *m);
diff --git a/net/9p/mux.c b/net/9p/mux.c
index 8a40a2e..3b0ed2c 100644
--- a/net/9p/mux.c
+++ b/net/9p/mux.c
@@ -157,21 +157,21 @@ static struct p9_trans_module p9_tcp_trans = {
 	.name = "tcp",
 	.maxsize = MAX_SOCK_BUF,
 	.def = 1,
-	.create = p9fd_create_tcp_client,
+	.create_client = p9fd_create_tcp_client,
 };
 
 static struct p9_trans_module p9_unix_trans = {
 	.name = "unix",
 	.maxsize = MAX_SOCK_BUF,
 	.def = 0,
-	.create = p9fd_create_unix_client,
+	.create_client = p9fd_create_unix_client,
 };
 
 static struct p9_trans_module p9_fd_trans = {
 	.name = "fd",
 	.maxsize = MAX_SOCK_BUF,
 	.def = 0,
-	.create = p9fd_create_fd_client,
+	.create_client = p9fd_create_fd_client,
 };
 
 /**
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux