OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [exportfs.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
#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
/*
12
 * The fileid_type identifies how the file within the filesystem is encoded.
13
 * In theory this is freely set and parsed by the filesystem, but we try to
14
 * stick to conventions so we can share some generic code and don't confuse
15
 * sniffers like ethereal/wireshark.
16
 *
17
 * The filesystem must not use the value '0' or '0xff'.
18
 */
19
enum fid_type {
20
        /*
21
         * The root, or export point, of the filesystem.
22
         * (Never actually passed down to the filesystem.
23
         */
24
        FILEID_ROOT = 0,
25
 
26
        /*
27
         * 32bit inode number, 32 bit generation number.
28
         */
29
        FILEID_INO32_GEN = 1,
30
 
31
        /*
32
         * 32bit inode number, 32 bit generation number,
33
         * 32 bit parent directory inode number.
34
         */
35
        FILEID_INO32_GEN_PARENT = 2,
36
};
37
 
38
struct fid {
39
        union {
40
                struct {
41
                        u32 ino;
42
                        u32 gen;
43
                        u32 parent_ino;
44
                        u32 parent_gen;
45
                } i32;
46
                __u32 raw[6];
47
        };
48
};
49
 
50
/**
51
 * struct export_operations - for nfsd to communicate with file systems
52
 * @decode_fh:      decode a file handle fragment and return a &struct dentry
53
 * @encode_fh:      encode a file handle fragment from a dentry
54
 * @get_name:       find the name for a given inode in a given directory
55
 * @get_parent:     find the parent of a given directory
56
 * @get_dentry:     find a dentry for the inode given a file handle sub-fragment
57
 *
58
 * See Documentation/filesystems/Exporting for details on how to use
59
 * this interface correctly.
60
 *
61
 * encode_fh:
62
 *    @encode_fh should store in the file handle fragment @fh (using at most
63
 *    @max_len bytes) information that can be used by @decode_fh to recover the
64
 *    file refered to by the &struct dentry @de.  If the @connectable flag is
65
 *    set, the encode_fh() should store sufficient information so that a good
66
 *    attempt can be made to find not only the file but also it's place in the
67
 *    filesystem.   This typically means storing a reference to de->d_parent in
68
 *    the filehandle fragment.  encode_fh() should return the number of bytes
69
 *    stored or a negative error code such as %-ENOSPC
70
 *
71
 * fh_to_dentry:
72
 *    @fh_to_dentry is given a &struct super_block (@sb) and a file handle
73
 *    fragment (@fh, @fh_len). It should return a &struct dentry which refers
74
 *    to the same file that the file handle fragment refers to.  If it cannot,
75
 *    it should return a %NULL pointer if the file was found but no acceptable
76
 *    &dentries were available, or an %ERR_PTR error code indicating why it
77
 *    couldn't be found (e.g. %ENOENT or %ENOMEM).  Any suitable dentry can be
78
 *    returned including, if necessary, a new dentry created with d_alloc_root.
79
 *    The caller can then find any other extant dentries by following the
80
 *    d_alias links.
81
 *
82
 * fh_to_parent:
83
 *    Same as @fh_to_dentry, except that it returns a pointer to the parent
84
 *    dentry if it was encoded into the filehandle fragment by @encode_fh.
85
 *
86
 * get_name:
87
 *    @get_name should find a name for the given @child in the given @parent
88
 *    directory.  The name should be stored in the @name (with the
89
 *    understanding that it is already pointing to a a %NAME_MAX+1 sized
90
 *    buffer.   get_name() should return %0 on success, a negative error code
91
 *    or error.  @get_name will be called without @parent->i_mutex held.
92
 *
93
 * get_parent:
94
 *    @get_parent should find the parent directory for the given @child which
95
 *    is also a directory.  In the event that it cannot be found, or storage
96
 *    space cannot be allocated, a %ERR_PTR should be returned.
97
 *
98
 * Locking rules:
99
 *    get_parent is called with child->d_inode->i_mutex down
100
 *    get_name is not (which is possibly inconsistent)
101
 */
102
 
103
struct export_operations {
104
        int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len,
105
                        int connectable);
106
        struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid,
107
                        int fh_len, int fh_type);
108
        struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid,
109
                        int fh_len, int fh_type);
110
        int (*get_name)(struct dentry *parent, char *name,
111
                        struct dentry *child);
112
        struct dentry * (*get_parent)(struct dentry *child);
113
};
114
 
115
extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
116
        int *max_len, int connectable);
117
extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
118
        int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *),
119
        void *context);
120
 
121
/*
122
 * Generic helpers for filesystems.
123
 */
124
extern struct dentry *generic_fh_to_dentry(struct super_block *sb,
125
        struct fid *fid, int fh_len, int fh_type,
126
        struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen));
127
extern struct dentry *generic_fh_to_parent(struct super_block *sb,
128
        struct fid *fid, int fh_len, int fh_type,
129
        struct inode *(*get_inode) (struct super_block *sb, u64 ino, u32 gen));
130
 
131
#endif /* LINUX_EXPORTFS_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.