aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2007-10-21 19:42:03 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-22 11:13:19 -0400
commit6e91ea2bb0b6a3ddf6d4faeb54a9c20d4e20bc42 (patch)
tree3f20a72d6c36620d071c485206b39e2e32546fc6 /include/linux
parent00bf4098beb15ca174b54f3af1f1e1908d7d18a3 (diff)
exportfs: add fid type
This patchset is a medium scale rewrite of the export operations interface. The goal is to make the interface less complex, and easier to understand from the filesystem side, aswell as preparing generic support for exporting of 64bit inode numbers. This touches all nfs exporting filesystems, and I've done testing on all of the filesystems I have here locally (xfs, ext2, ext3, reiserfs, jfs) This patch: Add a structured fid type so that we don't have to pass an array of u32 values around everywhere. It's a union of possible layouts. As a start there's only the u32 array and the traditional 32bit inode format, but there will be more in one of my next patchset when I start to document the various filehandle formats we have in lowlevel filesystems better. Also add an enum that gives the various filehandle types human- readable names. Note: Some people might think the struct containing an anonymous union is ugly, but I didn't want to pass around a raw union type. Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Neil Brown <neilb@suse.de> Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: <linux-ext4@vger.kernel.org> Cc: Dave Kleikamp <shaggy@austin.ibm.com> Cc: Anton Altaparmakov <aia21@cantab.net> Cc: David Chinner <dgc@sgi.com> Cc: Timothy Shimmin <tes@sgi.com> Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Cc: Hugh Dickins <hugh@veritas.com> Cc: Chris Mason <mason@suse.com> Cc: Jeff Mahoney <jeffm@suse.com> Cc: "Vladimir V. Saveliev" <vs@namesys.com> Cc: Steven Whitehouse <swhiteho@redhat.com> Cc: Mark Fasheh <mark.fasheh@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/exportfs.h44
1 files changed, 41 insertions, 3 deletions
diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h
index 8872fe8392d6..06178a1336ff 100644
--- a/include/linux/exportfs.h
+++ b/include/linux/exportfs.h
@@ -7,6 +7,44 @@ struct dentry;
7struct super_block; 7struct super_block;
8struct vfsmount; 8struct vfsmount;
9 9
10/*
11 * The fileid_type identifies how the file within the filesystem is encoded.
12 * In theory this is freely set and parsed by the filesystem, but we try to
13 * stick to conventions so we can share some generic code and don't confuse
14 * sniffers like ethereal/wireshark.
15 *
16 * The filesystem must not use the value '0' or '0xff'.
17 */
18enum fid_type {
19 /*
20 * The root, or export point, of the filesystem.
21 * (Never actually passed down to the filesystem.
22 */
23 FILEID_ROOT = 0,
24
25 /*
26 * 32bit inode number, 32 bit generation number.
27 */
28 FILEID_INO32_GEN = 1,
29
30 /*
31 * 32bit inode number, 32 bit generation number,
32 * 32 bit parent directory inode number.
33 */
34 FILEID_INO32_GEN_PARENT = 2,
35};
36
37struct fid {
38 union {
39 struct {
40 u32 ino;
41 u32 gen;
42 u32 parent_ino;
43 u32 parent_gen;
44 } i32;
45 __u32 raw[6];
46 };
47};
10 48
11/** 49/**
12 * struct export_operations - for nfsd to communicate with file systems 50 * struct export_operations - for nfsd to communicate with file systems
@@ -117,9 +155,9 @@ extern struct dentry *find_exported_dentry(struct super_block *sb, void *obj,
117 void *parent, int (*acceptable)(void *context, struct dentry *de), 155 void *parent, int (*acceptable)(void *context, struct dentry *de),
118 void *context); 156 void *context);
119 157
120extern int exportfs_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len, 158extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
121 int connectable); 159 int *max_len, int connectable);
122extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, __u32 *fh, 160extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
123 int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *), 161 int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *),
124 void *context); 162 void *context);
125 163