Skip to content

Commit

Permalink
9p: transport API reorganization
Browse files Browse the repository at this point in the history
This merges the mux.c (including the connection interface) with trans_fd
in preparation for transport API changes.  Ultimately, trans_fd will need
to be rewritten to clean it up and simplify the implementation, but this
reorganization is viewed as the first step.

Signed-off-by: Eric Van Hensbergen <[email protected]>
  • Loading branch information
Eric Van Hensbergen committed Feb 7, 2008
1 parent f393354 commit 8a0dc95
Show file tree
Hide file tree
Showing 11 changed files with 1,208 additions and 1,253 deletions.
51 changes: 11 additions & 40 deletions fs/9p/v9fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*
* This file contains functions assisting in mapping VFS to 9P2000
*
* Copyright (C) 2004 by Eric Van Hensbergen <[email protected]>
* Copyright (C) 2004-2008 by Eric Van Hensbergen <[email protected]>
* Copyright (C) 2002 by Ron Minnich <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
Expand Down Expand Up @@ -31,7 +31,6 @@
#include <linux/idr.h>
#include <net/9p/9p.h>
#include <net/9p/transport.h>
#include <net/9p/conn.h>
#include <net/9p/client.h>
#include "v9fs.h"
#include "v9fs_vfs.h"
Expand All @@ -43,11 +42,11 @@

enum {
/* Options that take integer arguments */
Opt_debug, Opt_msize, Opt_dfltuid, Opt_dfltgid, Opt_afid,
Opt_debug, Opt_dfltuid, Opt_dfltgid, Opt_afid,
/* String options */
Opt_uname, Opt_remotename, Opt_trans,
/* Options that take no arguments */
Opt_legacy, Opt_nodevmap,
Opt_nodevmap,
/* Cache options */
Opt_cache_loose,
/* Access options */
Expand All @@ -58,14 +57,11 @@ enum {

static match_table_t tokens = {
{Opt_debug, "debug=%x"},
{Opt_msize, "msize=%u"},
{Opt_dfltuid, "dfltuid=%u"},
{Opt_dfltgid, "dfltgid=%u"},
{Opt_afid, "afid=%u"},
{Opt_uname, "uname=%s"},
{Opt_remotename, "aname=%s"},
{Opt_trans, "trans=%s"},
{Opt_legacy, "noextend"},
{Opt_nodevmap, "nodevmap"},
{Opt_cache_loose, "cache=loose"},
{Opt_cache_loose, "loose"},
Expand All @@ -85,16 +81,14 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses)
char *options;
substring_t args[MAX_OPT_ARGS];
char *p;
int option;
int ret;
int option = 0;
char *s, *e;
int ret;

/* setup defaults */
v9ses->maxdata = 8192;
v9ses->afid = ~0;
v9ses->debug = 0;
v9ses->cache = 0;
v9ses->trans = v9fs_default_trans();

if (!v9ses->options)
return;
Expand All @@ -106,7 +100,8 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses)
continue;
token = match_token(p, tokens, args);
if (token < Opt_uname) {
if ((ret = match_int(&args[0], &option)) < 0) {
ret = match_int(&args[0], &option);
if (ret < 0) {
P9_DPRINTK(P9_DEBUG_ERROR,
"integer field, but no integer?\n");
continue;
Expand All @@ -119,9 +114,7 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses)
p9_debug_level = option;
#endif
break;
case Opt_msize:
v9ses->maxdata = option;
break;

case Opt_dfltuid:
v9ses->dfltuid = option;
break;
Expand All @@ -131,18 +124,12 @@ static void v9fs_parse_options(struct v9fs_session_info *v9ses)
case Opt_afid:
v9ses->afid = option;
break;
case Opt_trans:
v9ses->trans = v9fs_match_trans(&args[0]);
break;
case Opt_uname:
match_strcpy(v9ses->uname, &args[0]);
break;
case Opt_remotename:
match_strcpy(v9ses->aname, &args[0]);
break;
case Opt_legacy:
v9ses->flags &= ~V9FS_EXTENDED;
break;
case Opt_nodevmap:
v9ses->nodev = 1;
break;
Expand Down Expand Up @@ -185,7 +172,6 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
const char *dev_name, char *data)
{
int retval = -EINVAL;
struct p9_trans *trans = NULL;
struct p9_fid *fid;

v9ses->uname = __getname();
Expand All @@ -207,24 +193,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
v9ses->options = kstrdup(data, GFP_KERNEL);
v9fs_parse_options(v9ses);

if (v9ses->trans == NULL) {
retval = -EPROTONOSUPPORT;
P9_DPRINTK(P9_DEBUG_ERROR,
"No transport defined or default transport\n");
goto error;
}

trans = v9ses->trans->create(dev_name, v9ses->options);
if (IS_ERR(trans)) {
retval = PTR_ERR(trans);
trans = NULL;
goto error;
}
if ((v9ses->maxdata+P9_IOHDRSZ) > v9ses->trans->maxsize)
v9ses->maxdata = v9ses->trans->maxsize-P9_IOHDRSZ;

v9ses->clnt = p9_client_create(trans, v9ses->maxdata+P9_IOHDRSZ,
v9fs_extended(v9ses));
v9ses->clnt = p9_client_create(dev_name, v9ses->options);

if (IS_ERR(v9ses->clnt)) {
retval = PTR_ERR(v9ses->clnt);
Expand All @@ -236,6 +205,8 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
if (!v9ses->clnt->dotu)
v9ses->flags &= ~V9FS_EXTENDED;

v9ses->maxdata = v9ses->clnt->msize;

/* for legacy mode, fall back to V9FS_ACCESS_ANY */
if (!v9fs_extended(v9ses) &&
((v9ses->flags&V9FS_ACCESS_MASK) == V9FS_ACCESS_USER)) {
Expand Down
5 changes: 2 additions & 3 deletions fs/9p/v9fs.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* V9FS definitions.
*
* Copyright (C) 2004 by Eric Van Hensbergen <[email protected]>
* Copyright (C) 2004-2008 by Eric Van Hensbergen <[email protected]>
* Copyright (C) 2002 by Ron Minnich <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
Expand All @@ -28,7 +28,6 @@

struct v9fs_session_info {
/* options */
unsigned int maxdata;
unsigned char flags; /* session flags */
unsigned char nodev; /* set to 1 if no disable device mapping */
unsigned short debug; /* debug level */
Expand All @@ -38,10 +37,10 @@ struct v9fs_session_info {
char *options; /* copy of mount options */
char *uname; /* user name to mount as */
char *aname; /* name of remote hierarchy being mounted */
unsigned int maxdata; /* max data for client interface */
unsigned int dfltuid; /* default uid/muid for legacy support */
unsigned int dfltgid; /* default gid for legacy support */
u32 uid; /* if ACCESS_SINGLE, the uid that has access */
struct p9_trans_module *trans; /* 9p transport */
struct p9_client *clnt; /* 9p client */
struct dentry *debugfs_dir;
};
Expand Down
5 changes: 3 additions & 2 deletions include/net/9p/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*
* 9P Client Definitions
*
* Copyright (C) 2008 by Eric Van Hensbergen <[email protected]>
* Copyright (C) 2007 by Latchesar Ionkov <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
Expand All @@ -29,6 +30,7 @@ struct p9_client {
spinlock_t lock; /* protect client structure */
int msize;
unsigned char dotu;
struct p9_trans_module *trans_mod;
struct p9_trans *trans;
struct p9_conn *conn;

Expand All @@ -52,8 +54,7 @@ struct p9_fid {
struct list_head dlist; /* list of all fids attached to a dentry */
};

struct p9_client *p9_client_create(struct p9_trans *trans, int msize,
int dotu);
struct p9_client *p9_client_create(const char *dev_name, char *options);
void p9_client_destroy(struct p9_client *clnt);
void p9_client_disconnect(struct p9_client *clnt);
struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid,
Expand Down
57 changes: 0 additions & 57 deletions include/net/9p/conn.h

This file was deleted.

11 changes: 5 additions & 6 deletions include/net/9p/transport.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Transport Definition
*
* Copyright (C) 2005 by Latchesar Ionkov <[email protected]>
* Copyright (C) 2004 by Eric Van Hensbergen <[email protected]>
* Copyright (C) 2004-2008 by Eric Van Hensbergen <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
Expand Down Expand Up @@ -34,21 +34,20 @@ enum p9_trans_status {

struct p9_trans {
enum p9_trans_status status;
int msize;
unsigned char extended;
void *priv;
int (*write) (struct p9_trans *, void *, int);
int (*read) (struct p9_trans *, void *, int);
void (*close) (struct p9_trans *);
unsigned int (*poll)(struct p9_trans *, struct poll_table_struct *);
int (*rpc) (struct p9_trans *t, struct p9_fcall *tc,
struct p9_fcall **rc, int msize, int dotu);
struct p9_fcall **rc);
};

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)(const char *, char *, int, unsigned char);
};

void v9fs_register_trans(struct p9_trans_module *m);
Expand Down
1 change: 0 additions & 1 deletion net/9p/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ obj-$(CONFIG_NET_9P_VIRTIO) += 9pnet_virtio.o

9pnet-objs := \
mod.o \
mux.o \
client.o \
conv.o \
error.o \
Expand Down
Loading

0 comments on commit 8a0dc95

Please sign in to comment.