Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
exportfs.h
Go to the documentation of this file.
1 #ifndef LINUX_EXPORTFS_H
2 #define LINUX_EXPORTFS_H 1
3 
4 #include <linux/types.h>
5 
6 struct dentry;
7 struct inode;
8 struct super_block;
9 struct vfsmount;
10 
11 /* limit the handle size to NFSv4 handle size now */
12 #define MAX_HANDLE_SZ 128
13 
14 /*
15  * The fileid_type identifies how the file within the filesystem is encoded.
16  * In theory this is freely set and parsed by the filesystem, but we try to
17  * stick to conventions so we can share some generic code and don't confuse
18  * sniffers like ethereal/wireshark.
19  *
20  * The filesystem must not use the value '0' or '0xff'.
21  */
22 enum fid_type {
23  /*
24  * The root, or export point, of the filesystem.
25  * (Never actually passed down to the filesystem.
26  */
28 
29  /*
30  * 32bit inode number, 32 bit generation number.
31  */
33 
34  /*
35  * 32bit inode number, 32 bit generation number,
36  * 32 bit parent directory inode number.
37  */
39 
40  /*
41  * 64 bit object ID, 64 bit root object ID,
42  * 32 bit generation number.
43  */
45 
46  /*
47  * 64 bit object ID, 64 bit root object ID,
48  * 32 bit generation number,
49  * 64 bit parent object ID, 32 bit parent generation.
50  */
52 
53  /*
54  * 64 bit object ID, 64 bit root object ID,
55  * 32 bit generation number,
56  * 64 bit parent object ID, 32 bit parent generation,
57  * 64 bit parent root object ID.
58  */
60 
61  /*
62  * 32 bit block number, 16 bit partition reference,
63  * 16 bit unused, 32 bit generation number.
64  */
66 
67  /*
68  * 32 bit block number, 16 bit partition reference,
69  * 16 bit unused, 32 bit generation number,
70  * 32 bit parent block number, 32 bit parent generation number
71  */
73 
74  /*
75  * 64 bit checkpoint number, 64 bit inode number,
76  * 32 bit generation number.
77  */
79 
80  /*
81  * 64 bit checkpoint number, 64 bit inode number,
82  * 32 bit generation number, 32 bit parent generation.
83  * 64 bit parent inode number.
84  */
86 };
87 
88 struct fid {
89  union {
90  struct {
95  } i32;
96  struct {
103  } udf;
104  __u32 raw[0];
105  };
106 };
107 
168  int (*encode_fh)(struct inode *inode, __u32 *fh, int *max_len,
169  struct inode *parent);
170  struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid,
171  int fh_len, int fh_type);
172  struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid,
173  int fh_len, int fh_type);
174  int (*get_name)(struct dentry *parent, char *name,
175  struct dentry *child);
176  struct dentry * (*get_parent)(struct dentry *child);
178 };
179 
180 extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
181  int *max_len, int connectable);
182 extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
183  int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *),
184  void *context);
185 
186 /*
187  * Generic helpers for filesystems.
188  */
189 extern struct dentry *generic_fh_to_dentry(struct super_block *sb,
190  struct fid *fid, int fh_len, int fh_type,
191  struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen));
192 extern struct dentry *generic_fh_to_parent(struct super_block *sb,
193  struct fid *fid, int fh_len, int fh_type,
194  struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen));
195 
196 #endif /* LINUX_EXPORTFS_H */