2005-04-17 02:20:36 +04:00
/*
* Copyright ( C ) 1995 - 1997 Olaf Kirch < okir @ monad . swb . de >
*/
# ifndef NFSD_EXPORT_H
# define NFSD_EXPORT_H
2014-05-06 21:37:13 +04:00
# include <linux/sunrpc/cache.h>
2012-10-09 12:49:02 +04:00
# include <uapi/linux/nfsd/export.h>
2005-04-17 02:20:36 +04:00
2014-05-06 21:37:13 +04:00
struct knfsd_fh ;
struct svc_fh ;
struct svc_rqst ;
2006-10-04 13:16:18 +04:00
/*
* FS Locations
*/
# define MAX_FS_LOCATIONS 128
struct nfsd4_fs_location {
char * hosts ; /* colon separated list of hosts */
char * path ; /* slash separated list of path components */
} ;
struct nfsd4_fs_locations {
uint32_t locations_count ;
struct nfsd4_fs_location * locations ;
/* If we're not actually serving this data ourselves (only providing a
* list of replicas that do serve it ) then we set " migrated " : */
int migrated ;
} ;
2007-07-17 15:04:42 +04:00
/*
* We keep an array of pseudoflavors with the export , in order from most
2011-03-31 05:57:33 +04:00
* to least preferred . For the foreseeable future , we don ' t expect more
2007-07-17 15:04:42 +04:00
* than the eight pseudoflavors null , unix , krb5 , krb5i , krb5p , skpm3 ,
* spkm3i , and spkm3p ( and using all 8 at once should be rare ) .
*/
# define MAX_SECINFO_LIST 8
struct exp_flavor_info {
u32 pseudoflavor ;
u32 flags ;
} ;
2005-04-17 02:20:36 +04:00
struct svc_export {
struct cache_head h ;
struct auth_domain * ex_client ;
int ex_flags ;
2008-02-15 06:38:39 +03:00
struct path ex_path ;
2013-02-02 18:42:53 +04:00
kuid_t ex_anon_uid ;
kgid_t ex_anon_gid ;
2005-04-17 02:20:36 +04:00
int ex_fsid ;
2007-02-14 11:33:12 +03:00
unsigned char * ex_uuid ; /* 16 byte fsid */
2006-10-04 13:16:18 +04:00
struct nfsd4_fs_locations ex_fslocs ;
2007-07-17 15:04:42 +04:00
int ex_nflavors ;
struct exp_flavor_info ex_flavors [ MAX_SECINFO_LIST ] ;
2012-03-28 19:09:08 +04:00
struct cache_detail * cd ;
2005-04-17 02:20:36 +04:00
} ;
/* an "export key" (expkey) maps a filehandlefragement to an
2007-02-14 11:33:12 +03:00
* svc_export for a given client . There can be several per export ,
* for the different fsid types .
2005-04-17 02:20:36 +04:00
*/
struct svc_expkey {
struct cache_head h ;
struct auth_domain * ek_client ;
int ek_fsidtype ;
2007-02-14 11:33:12 +03:00
u32 ek_fsid [ 6 ] ;
2005-04-17 02:20:36 +04:00
2008-02-15 06:38:41 +03:00
struct path ek_path ;
2005-04-17 02:20:36 +04:00
} ;
# define EX_ISSYNC(exp) (!((exp)->ex_flags & NFSEXP_ASYNC))
# define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE)
# define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
2007-07-19 12:49:20 +04:00
int nfsexp_flags ( struct svc_rqst * rqstp , struct svc_export * exp ) ;
2007-07-17 15:04:48 +04:00
__be32 check_nfsd_access ( struct svc_export * exp , struct svc_rqst * rqstp ) ;
2005-04-17 02:20:36 +04:00
/*
* Function declarations
*/
2012-04-11 15:13:14 +04:00
int nfsd_export_init ( struct net * ) ;
void nfsd_export_shutdown ( struct net * ) ;
2012-04-11 15:13:21 +04:00
void nfsd_export_flush ( struct net * ) ;
2007-07-17 15:04:44 +04:00
struct svc_export * rqst_exp_get_by_name ( struct svc_rqst * ,
2009-04-18 10:42:05 +04:00
struct path * ) ;
2007-07-17 15:04:44 +04:00
struct svc_export * rqst_exp_parent ( struct svc_rqst * ,
2009-04-18 11:00:46 +04:00
struct path * ) ;
2011-09-13 03:37:06 +04:00
struct svc_export * rqst_find_fsidzero_export ( struct svc_rqst * ) ;
2012-04-11 15:13:21 +04:00
int exp_rootfh ( struct net * , struct auth_domain * ,
2005-04-17 02:20:36 +04:00
char * path , struct knfsd_fh * , int maxsize ) ;
2007-07-17 15:04:43 +04:00
__be32 exp_pseudoroot ( struct svc_rqst * , struct svc_fh * ) ;
2006-10-20 10:28:54 +04:00
__be32 nfserrno ( int errno ) ;
2005-04-17 02:20:36 +04:00
static inline void exp_put ( struct svc_export * exp )
{
2012-03-28 19:09:15 +04:00
cache_put ( & exp - > h , exp - > cd ) ;
2005-04-17 02:20:36 +04:00
}
static inline void exp_get ( struct svc_export * exp )
{
cache_get ( & exp - > h ) ;
}
2007-07-17 15:04:44 +04:00
struct svc_export * rqst_exp_find ( struct svc_rqst * , int , u32 * ) ;
2005-04-17 02:20:36 +04:00
# endif /* NFSD_EXPORT_H */