forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
…/git/ericvh/v9fs * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs: 9p: fix p9_printfcall export 9p: transport API reorganization 9p: add remove function to trans_virtio 9p: Convert semaphore to spinlock for p9_idpool 9p: fix mmap to be read-only 9p: add support for sticky bit 9p: Fix soft lockup in virtio transport 9p: fix bug in attach-per-user 9p: block-based virtio client 9p: create transport rpc cut-thru 9p: fix bug in p9_clone_stat
- Loading branch information
Showing
17 changed files
with
1,466 additions
and
1,390 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
|
@@ -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" | ||
|
@@ -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 */ | ||
|
@@ -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"}, | ||
|
@@ -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; | ||
|
@@ -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; | ||
|
@@ -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; | ||
|
@@ -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; | ||
|
@@ -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(); | ||
|
@@ -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); | ||
|
@@ -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)) { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
@@ -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 */ | ||
|
@@ -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; | ||
}; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
|
@@ -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; | ||
|
||
|
@@ -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, | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
|
@@ -34,19 +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); | ||
}; | ||
|
||
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); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.