2005-09-10 00:04:20 +04:00
/*
* V9FS definitions .
*
2008-02-07 04:25:03 +03:00
* Copyright ( C ) 2004 - 2008 by Eric Van Hensbergen < ericvh @ gmail . com >
2005-09-10 00:04:20 +04:00
* Copyright ( C ) 2002 by Ron Minnich < rminnich @ lanl . gov >
*
* This program is free software ; you can redistribute it and / or modify
2006-03-25 14:07:28 +03:00
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation .
2005-09-10 00:04:20 +04:00
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to :
* Free Software Foundation
* 51 Franklin Street , Fifth Floor
* Boston , MA 02111 - 1301 USA
*
*/
2008-03-05 16:08:09 +03:00
/**
* enum p9_session_flags - option flags for each 9 P session
* @ V9FS_EXTENDED : whether or not to use 9 P2000 . 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 ,
2009-09-23 22:00:27 +04:00
CACHE_FSCACHE ,
2008-03-05 16:08:09 +03:00
} ;
/**
* 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
2009-09-23 22:00:27 +04:00
* @ cachetag : the tag of the cache associated with this session
* @ fscache : session cookie associated with FS - Cache
2008-03-05 16:08:09 +03:00
* @ 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 9 P network client instantiated for this session
2009-09-23 22:00:27 +04:00
* @ slist : reference to list of registered 9 p sessions
2008-03-05 16:08:09 +03:00
*
* 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 .
*/
2005-09-10 00:04:20 +04:00
struct v9fs_session_info {
/* options */
2008-03-05 16:08:09 +03:00
unsigned char flags ;
unsigned char nodev ;
unsigned short debug ;
unsigned int afid ;
unsigned int cache ;
2009-09-23 22:00:27 +04:00
# ifdef CONFIG_9P_FSCACHE
char * cachetag ;
struct fscache_cookie * fscache ;
# endif
2005-09-10 00:04:20 +04:00
2007-10-17 23:31:07 +04:00
char * uname ; /* user name to mount as */
char * aname ; /* name of remote hierarchy being mounted */
2008-02-07 04:25:03 +03:00
unsigned int maxdata ; /* max data for client interface */
2007-10-17 23:31:07 +04:00
unsigned int dfltuid ; /* default uid/muid for legacy support */
unsigned int dfltgid ; /* default gid for legacy support */
2007-10-17 23:31:07 +04:00
u32 uid ; /* if ACCESS_SINGLE, the uid that has access */
2007-07-11 02:57:28 +04:00
struct p9_client * clnt ; /* 9p client */
2009-09-23 22:00:27 +04:00
struct list_head slist ; /* list of sessions registered with v9fs */
2005-09-10 00:04:20 +04:00
} ;
2007-07-11 02:57:28 +04:00
struct p9_fid * v9fs_session_init ( struct v9fs_session_info * , const char * ,
char * ) ;
2005-09-10 00:04:20 +04:00
void v9fs_session_close ( struct v9fs_session_info * v9ses ) ;
2005-09-10 00:04:23 +04:00
void v9fs_session_cancel ( struct v9fs_session_info * v9ses ) ;
2005-09-10 00:04:20 +04:00
# define V9FS_MAGIC 0x01021997
/* other default globals */
2007-10-17 23:31:07 +04:00
# define V9FS_PORT 564
2005-09-10 00:04:20 +04:00
# define V9FS_DEFUSER "nobody"
# define V9FS_DEFANAME ""
2007-10-17 23:31:07 +04:00
# define V9FS_DEFUID (-2)
# define V9FS_DEFGID (-2)
2005-09-10 00:04:20 +04:00
2007-07-11 02:57:28 +04:00
static inline struct v9fs_session_info * v9fs_inode2v9ses ( struct inode * inode )
{
return ( inode - > i_sb - > s_fs_info ) ;
}
2007-10-17 23:31:07 +04:00
static inline int v9fs_extended ( struct v9fs_session_info * v9ses )
{
return v9ses - > flags & V9FS_EXTENDED ;
}