aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2007-07-17 07:04:28 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-17 13:23:06 -0400
commita569425512253992cc64ebf8b6d00a62f986db3e (patch)
tree7ea72c75c54697bddbad807af89cc549d7426a69 /include
parent6dd4ac3b30b81b5bd0d628af1c89b7da689a38ea (diff)
knfsd: exportfs: add exportfs.h header
currently the export_operation structure and helpers related to it are in fs.h. fs.h is already far too large and there are very few places needing the export bits, so split them off into a separate header. [akpm@linux-foundation.org: fix cifs build] Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Neil Brown <neilb@suse.de> Cc: Steven French <sfrench@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/exportfs.h119
-rw-r--r--include/linux/fs.h114
2 files changed, 120 insertions, 113 deletions
diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h
new file mode 100644
index 000000000000..fdc306fbba50
--- /dev/null
+++ b/include/linux/exportfs.h
@@ -0,0 +1,119 @@
1#ifndef LINUX_EXPORTFS_H
2#define LINUX_EXPORTFS_H 1
3
4#include <linux/types.h>
5
6struct dentry;
7struct super_block;
8
9
10/**
11 * struct export_operations - for nfsd to communicate with file systems
12 * @decode_fh: decode a file handle fragment and return a &struct dentry
13 * @encode_fh: encode a file handle fragment from a dentry
14 * @get_name: find the name for a given inode in a given directory
15 * @get_parent: find the parent of a given directory
16 * @get_dentry: find a dentry for the inode given a file handle sub-fragment
17 * @find_exported_dentry:
18 * set by the exporting module to a standard helper function.
19 *
20 * Description:
21 * The export_operations structure provides a means for nfsd to communicate
22 * with a particular exported file system - particularly enabling nfsd and
23 * the filesystem to co-operate when dealing with file handles.
24 *
25 * export_operations contains two basic operation for dealing with file
26 * handles, decode_fh() and encode_fh(), and allows for some other
27 * operations to be defined which standard helper routines use to get
28 * specific information from the filesystem.
29 *
30 * nfsd encodes information use to determine which filesystem a filehandle
31 * applies to in the initial part of the file handle. The remainder, termed
32 * a file handle fragment, is controlled completely by the filesystem. The
33 * standard helper routines assume that this fragment will contain one or
34 * two sub-fragments, one which identifies the file, and one which may be
35 * used to identify the (a) directory containing the file.
36 *
37 * In some situations, nfsd needs to get a dentry which is connected into a
38 * specific part of the file tree. To allow for this, it passes the
39 * function acceptable() together with a @context which can be used to see
40 * if the dentry is acceptable. As there can be multiple dentrys for a
41 * given file, the filesystem should check each one for acceptability before
42 * looking for the next. As soon as an acceptable one is found, it should
43 * be returned.
44 *
45 * decode_fh:
46 * @decode_fh is given a &struct super_block (@sb), a file handle fragment
47 * (@fh, @fh_len) and an acceptability testing function (@acceptable,
48 * @context). It should return a &struct dentry which refers to the same
49 * file that the file handle fragment refers to, and which passes the
50 * acceptability test. If it cannot, it should return a %NULL pointer if
51 * the file was found but no acceptable &dentries were available, or a
52 * %ERR_PTR error code indicating why it couldn't be found (e.g. %ENOENT or
53 * %ENOMEM).
54 *
55 * encode_fh:
56 * @encode_fh should store in the file handle fragment @fh (using at most
57 * @max_len bytes) information that can be used by @decode_fh to recover the
58 * file refered to by the &struct dentry @de. If the @connectable flag is
59 * set, the encode_fh() should store sufficient information so that a good
60 * attempt can be made to find not only the file but also it's place in the
61 * filesystem. This typically means storing a reference to de->d_parent in
62 * the filehandle fragment. encode_fh() should return the number of bytes
63 * stored or a negative error code such as %-ENOSPC
64 *
65 * get_name:
66 * @get_name should find a name for the given @child in the given @parent
67 * directory. The name should be stored in the @name (with the
68 * understanding that it is already pointing to a a %NAME_MAX+1 sized
69 * buffer. get_name() should return %0 on success, a negative error code
70 * or error. @get_name will be called without @parent->i_mutex held.
71 *
72 * get_parent:
73 * @get_parent should find the parent directory for the given @child which
74 * is also a directory. In the event that it cannot be found, or storage
75 * space cannot be allocated, a %ERR_PTR should be returned.
76 *
77 * get_dentry:
78 * Given a &super_block (@sb) and a pointer to a file-system specific inode
79 * identifier, possibly an inode number, (@inump) get_dentry() should find
80 * the identified inode and return a dentry for that inode. Any suitable
81 * dentry can be returned including, if necessary, a new dentry created with
82 * d_alloc_root. The caller can then find any other extant dentrys by
83 * following the d_alias links. If a new dentry was created using
84 * d_alloc_root, DCACHE_NFSD_DISCONNECTED should be set, and the dentry
85 * should be d_rehash()ed.
86 *
87 * If the inode cannot be found, either a %NULL pointer or an %ERR_PTR code
88 * can be returned. The @inump will be whatever was passed to
89 * nfsd_find_fh_dentry() in either the @obj or @parent parameters.
90 *
91 * Locking rules:
92 * get_parent is called with child->d_inode->i_mutex down
93 * get_name is not (which is possibly inconsistent)
94 */
95
96struct export_operations {
97 struct dentry *(*decode_fh)(struct super_block *sb, __u32 *fh,
98 int fh_len, int fh_type,
99 int (*acceptable)(void *context, struct dentry *de),
100 void *context);
101 int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len,
102 int connectable);
103 int (*get_name)(struct dentry *parent, char *name,
104 struct dentry *child);
105 struct dentry * (*get_parent)(struct dentry *child);
106 struct dentry * (*get_dentry)(struct super_block *sb, void *inump);
107
108 /* This is set by the exporting module to a standard helper */
109 struct dentry * (*find_exported_dentry)(
110 struct super_block *sb, void *obj, void *parent,
111 int (*acceptable)(void *context, struct dentry *de),
112 void *context);
113};
114
115extern struct dentry *find_exported_dentry(struct super_block *sb, void *obj,
116 void *parent, int (*acceptable)(void *context, struct dentry *de),
117 void *context);
118
119#endif /* LINUX_EXPORTFS_H */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index aa74f7de9dcd..58ce336d4a6b 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -289,6 +289,7 @@ extern int dir_notify_enable;
289#include <asm/semaphore.h> 289#include <asm/semaphore.h>
290#include <asm/byteorder.h> 290#include <asm/byteorder.h>
291 291
292struct export_operations;
292struct hd_geometry; 293struct hd_geometry;
293struct iovec; 294struct iovec;
294struct nameidata; 295struct nameidata;
@@ -1278,119 +1279,6 @@ static inline void file_accessed(struct file *file)
1278 1279
1279int sync_inode(struct inode *inode, struct writeback_control *wbc); 1280int sync_inode(struct inode *inode, struct writeback_control *wbc);
1280 1281
1281/**
1282 * struct export_operations - for nfsd to communicate with file systems
1283 * @decode_fh: decode a file handle fragment and return a &struct dentry
1284 * @encode_fh: encode a file handle fragment from a dentry
1285 * @get_name: find the name for a given inode in a given directory
1286 * @get_parent: find the parent of a given directory
1287 * @get_dentry: find a dentry for the inode given a file handle sub-fragment
1288 * @find_exported_dentry:
1289 * set by the exporting module to a standard helper function.
1290 *
1291 * Description:
1292 * The export_operations structure provides a means for nfsd to communicate
1293 * with a particular exported file system - particularly enabling nfsd and
1294 * the filesystem to co-operate when dealing with file handles.
1295 *
1296 * export_operations contains two basic operation for dealing with file
1297 * handles, decode_fh() and encode_fh(), and allows for some other
1298 * operations to be defined which standard helper routines use to get
1299 * specific information from the filesystem.
1300 *
1301 * nfsd encodes information use to determine which filesystem a filehandle
1302 * applies to in the initial part of the file handle. The remainder, termed
1303 * a file handle fragment, is controlled completely by the filesystem. The
1304 * standard helper routines assume that this fragment will contain one or
1305 * two sub-fragments, one which identifies the file, and one which may be
1306 * used to identify the (a) directory containing the file.
1307 *
1308 * In some situations, nfsd needs to get a dentry which is connected into a
1309 * specific part of the file tree. To allow for this, it passes the
1310 * function acceptable() together with a @context which can be used to see
1311 * if the dentry is acceptable. As there can be multiple dentrys for a
1312 * given file, the filesystem should check each one for acceptability before
1313 * looking for the next. As soon as an acceptable one is found, it should
1314 * be returned.
1315 *
1316 * decode_fh:
1317 * @decode_fh is given a &struct super_block (@sb), a file handle fragment
1318 * (@fh, @fh_len) and an acceptability testing function (@acceptable,
1319 * @context). It should return a &struct dentry which refers to the same
1320 * file that the file handle fragment refers to, and which passes the
1321 * acceptability test. If it cannot, it should return a %NULL pointer if
1322 * the file was found but no acceptable &dentries were available, or a
1323 * %ERR_PTR error code indicating why it couldn't be found (e.g. %ENOENT or
1324 * %ENOMEM).
1325 *
1326 * encode_fh:
1327 * @encode_fh should store in the file handle fragment @fh (using at most
1328 * @max_len bytes) information that can be used by @decode_fh to recover the
1329 * file refered to by the &struct dentry @de. If the @connectable flag is
1330 * set, the encode_fh() should store sufficient information so that a good
1331 * attempt can be made to find not only the file but also it's place in the
1332 * filesystem. This typically means storing a reference to de->d_parent in
1333 * the filehandle fragment. encode_fh() should return the number of bytes
1334 * stored or a negative error code such as %-ENOSPC
1335 *
1336 * get_name:
1337 * @get_name should find a name for the given @child in the given @parent
1338 * directory. The name should be stored in the @name (with the
1339 * understanding that it is already pointing to a a %NAME_MAX+1 sized
1340 * buffer. get_name() should return %0 on success, a negative error code
1341 * or error. @get_name will be called without @parent->i_mutex held.
1342 *
1343 * get_parent:
1344 * @get_parent should find the parent directory for the given @child which
1345 * is also a directory. In the event that it cannot be found, or storage
1346 * space cannot be allocated, a %ERR_PTR should be returned.
1347 *
1348 * get_dentry:
1349 * Given a &super_block (@sb) and a pointer to a file-system specific inode
1350 * identifier, possibly an inode number, (@inump) get_dentry() should find
1351 * the identified inode and return a dentry for that inode. Any suitable
1352 * dentry can be returned including, if necessary, a new dentry created with
1353 * d_alloc_root. The caller can then find any other extant dentrys by
1354 * following the d_alias links. If a new dentry was created using
1355 * d_alloc_root, DCACHE_NFSD_DISCONNECTED should be set, and the dentry
1356 * should be d_rehash()ed.
1357 *
1358 * If the inode cannot be found, either a %NULL pointer or an %ERR_PTR code
1359 * can be returned. The @inump will be whatever was passed to
1360 * nfsd_find_fh_dentry() in either the @obj or @parent parameters.
1361 *
1362 * Locking rules:
1363 * get_parent is called with child->d_inode->i_mutex down
1364 * get_name is not (which is possibly inconsistent)
1365 */
1366
1367struct export_operations {
1368 struct dentry *(*decode_fh)(struct super_block *sb, __u32 *fh, int fh_len, int fh_type,
1369 int (*acceptable)(void *context, struct dentry *de),
1370 void *context);
1371 int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len,
1372 int connectable);
1373
1374 /* the following are only called from the filesystem itself */
1375 int (*get_name)(struct dentry *parent, char *name,
1376 struct dentry *child);
1377 struct dentry * (*get_parent)(struct dentry *child);
1378 struct dentry * (*get_dentry)(struct super_block *sb, void *inump);
1379
1380 /* This is set by the exporting module to a standard helper */
1381 struct dentry * (*find_exported_dentry)(
1382 struct super_block *sb, void *obj, void *parent,
1383 int (*acceptable)(void *context, struct dentry *de),
1384 void *context);
1385
1386
1387};
1388
1389extern struct dentry *
1390find_exported_dentry(struct super_block *sb, void *obj, void *parent,
1391 int (*acceptable)(void *context, struct dentry *de),
1392 void *context);
1393
1394struct file_system_type { 1282struct file_system_type {
1395 const char *name; 1283 const char *name;
1396 int fs_flags; 1284 int fs_flags;