Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * include/linux/nfsd/export.h
  3  * 
  4  * Public declarations for NFS exports. The definitions for the
  5  * syscall interface are in nfsctl.h
  6  *
  7  * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
  8  */
  9 
 10 #ifndef NFSD_EXPORT_H
 11 #define NFSD_EXPORT_H
 12 
 13 #include <asm/types.h>
 14 #ifdef __KERNEL__
 15 # include <linux/types.h>
 16 # include <linux/in.h>
 17 #endif
 18 
 19 /*
 20  * Important limits for the exports stuff.
 21  */
 22 #define NFSCLNT_IDMAX           1024
 23 #define NFSCLNT_ADDRMAX         16
 24 #define NFSCLNT_KEYMAX          32
 25 
 26 /*
 27  * Export flags.
 28  */
 29 #define NFSEXP_READONLY         0x0001
 30 #define NFSEXP_INSECURE_PORT    0x0002
 31 #define NFSEXP_ROOTSQUASH       0x0004
 32 #define NFSEXP_ALLSQUASH        0x0008
 33 #define NFSEXP_ASYNC            0x0010
 34 #define NFSEXP_GATHERED_WRITES  0x0020
 35 /* 40 80 100 currently unused */
 36 #define NFSEXP_NOHIDE           0x0200
 37 #define NFSEXP_NOSUBTREECHECK   0x0400
 38 #define NFSEXP_NOAUTHNLM        0x0800          /* Don't authenticate NLM requests - just trust */
 39 #define NFSEXP_MSNFS            0x1000  /* do silly things that MS clients expect */
 40 #define NFSEXP_FSID             0x2000
 41 #define NFSEXP_CROSSMOUNT       0x4000
 42 #define NFSEXP_NOACL            0x8000  /* reserved for possible ACL related use */
 43 #define NFSEXP_ALLFLAGS         0xFE3F
 44 
 45 
 46 #ifdef __KERNEL__
 47 
 48 struct svc_export {
 49         struct cache_head       h;
 50         struct auth_domain *    ex_client;
 51         int                     ex_flags;
 52         struct vfsmount *       ex_mnt;
 53         struct dentry *         ex_dentry;
 54         uid_t                   ex_anon_uid;
 55         gid_t                   ex_anon_gid;
 56         int                     ex_fsid;
 57 };
 58 
 59 /* an "export key" (expkey) maps a filehandlefragement to an
 60  * svc_export for a given client.  There can be two per export, one
 61  * for type 0 (dev/ino), one for type 1 (fsid)
 62  */
 63 struct svc_expkey {
 64         struct cache_head       h;
 65 
 66         struct auth_domain *    ek_client;
 67         int                     ek_fsidtype;
 68         u32                     ek_fsid[3];
 69 
 70         struct svc_export *     ek_export;
 71 };
 72 
 73 #define EX_SECURE(exp)          (!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
 74 #define EX_ISSYNC(exp)          (!((exp)->ex_flags & NFSEXP_ASYNC))
 75 #define EX_RDONLY(exp)          ((exp)->ex_flags & NFSEXP_READONLY)
 76 #define EX_NOHIDE(exp)          ((exp)->ex_flags & NFSEXP_NOHIDE)
 77 #define EX_WGATHER(exp)         ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
 78 
 79 
 80 /*
 81  * Function declarations
 82  */
 83 void                    nfsd_export_init(void);
 84 void                    nfsd_export_shutdown(void);
 85 void                    nfsd_export_flush(void);
 86 void                    exp_readlock(void);
 87 void                    exp_readunlock(void);
 88 struct svc_expkey *     exp_find_key(struct auth_domain *clp, 
 89                                      int fsid_type, u32 *fsidv,
 90                                      struct cache_req *reqp);
 91 struct svc_export *     exp_get_by_name(struct auth_domain *clp,
 92                                         struct vfsmount *mnt,
 93                                         struct dentry *dentry,
 94                                         struct cache_req *reqp);
 95 struct svc_export *     exp_parent(struct auth_domain *clp,
 96                                    struct vfsmount *mnt,
 97                                    struct dentry *dentry,
 98                                    struct cache_req *reqp);
 99 int                     exp_rootfh(struct auth_domain *, 
100                                         char *path, struct knfsd_fh *, int maxsize);
101 int                     exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq);
102 int                     nfserrno(int errno);
103 
104 extern void expkey_put(struct cache_head *item, struct cache_detail *cd);
105 extern void svc_export_put(struct cache_head *item, struct cache_detail *cd);
106 extern struct cache_detail svc_export_cache, svc_expkey_cache;
107 
108 static inline void exp_put(struct svc_export *exp)
109 {
110         svc_export_put(&exp->h, &svc_export_cache);
111 }
112 
113 static inline void exp_get(struct svc_export *exp)
114 {
115         cache_get(&exp->h);
116 }
117 static inline struct svc_export *
118 exp_find(struct auth_domain *clp, int fsid_type, u32 *fsidv,
119          struct cache_req *reqp)
120 {
121         struct svc_expkey *ek = exp_find_key(clp, fsid_type, fsidv, reqp);
122         if (ek && !IS_ERR(ek)) {
123                 struct svc_export *exp = ek->ek_export;
124                 int err;
125                 exp_get(exp);
126                 expkey_put(&ek->h, &svc_expkey_cache);
127                 if ((err = cache_check(&svc_export_cache, &exp->h, reqp)))
128                         exp = ERR_PTR(err);
129                 return exp;
130         } else
131                 return ERR_PTR(PTR_ERR(ek));
132 }
133 
134 #endif /* __KERNEL__ */
135 
136 #endif /* NFSD_EXPORT_H */
137 
138 
  This page was automatically generated by the LXR engine.