#ifndef LINUX_EXPORTFS_H #define LINUX_EXPORTFS_H 1 #include struct dentry; struct inode; struct super_block; struct vfsmount; #define MAX_HANDLE_SZ 128 enum fid_type { FILEID_ROOT = 0, FILEID_INO32_GEN = 1, FILEID_INO32_GEN_PARENT = 2, FILEID_BTRFS_WITHOUT_PARENT = 0x4d, FILEID_BTRFS_WITH_PARENT = 0x4e, FILEID_BTRFS_WITH_PARENT_ROOT = 0x4f, FILEID_UDF_WITHOUT_PARENT = 0x51, FILEID_UDF_WITH_PARENT = 0x52, FILEID_NILFS_WITHOUT_PARENT = 0x61, FILEID_NILFS_WITH_PARENT = 0x62, }; struct fid { union { struct { u32 ino; u32 gen; u32 parent_ino; u32 parent_gen; } i32; struct { u32 block; u16 partref; u16 parent_partref; u32 generation; u32 parent_block; u32 parent_generation; } udf; __u32 raw[0]; }; }; struct export_operations { int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len, int connectable); struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid, int fh_len, int fh_type); struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid, int fh_len, int fh_type); int (*get_name)(struct dentry *parent, char *name, struct dentry *child); struct dentry * (*get_parent)(struct dentry *child); int (*commit_metadata)(struct inode *inode); }; extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, int *max_len, int connectable); extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid, int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *), void *context); extern struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)); extern struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid, int fh_len, int fh_type, struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen)); #endif