Subversion Repositories HelenOS

Rev

Rev 2560 | Rev 2589 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2560 Rev 2587
Line 97... Line 97...
97
    atomic_t phone_futex;   /**< Phone serializing futex. */
97
    atomic_t phone_futex;   /**< Phone serializing futex. */
98
    ipcarg_t phone;
98
    ipcarg_t phone;
99
} fs_info_t;
99
} fs_info_t;
100
 
100
 
101
/**
101
/**
102
 * Instances of this type represent a file system node (e.g. directory, file).
102
 * VFS_PAIR uniquely represents a file system instance.
-
 
103
 */
-
 
104
#define VFS_PAIR    \
-
 
105
    int fs_handle;  \
-
 
106
    int dev_handle; 
-
 
107
 
-
 
108
/**
103
 * They are abstracted away from any file system implementation and contain just
109
 * VFS_TRIPLET uniquely identifies a file system node (e.g. directory, file) but
104
 * enough bits to uniquely identify the object in its file system instance.
110
 * doesn't contain any state. For a stateful structure, see vfs_node_t.
105
 *
111
 *
106
 * @note    fs_handle, dev_handle and index are meant to be returned in one
112
 * @note    fs_handle, dev_handle and index are meant to be returned in one
107
 *      IPC reply.
113
 *      IPC reply.
108
 */
114
 */
-
 
115
#define VFS_TRIPLET \
-
 
116
    VFS_PAIR;   \
-
 
117
    uint64_t index;
-
 
118
 
-
 
119
typedef struct {
-
 
120
    VFS_PAIR;
-
 
121
} vfs_pair_t;
-
 
122
 
-
 
123
typedef struct {
-
 
124
    VFS_TRIPLET;
-
 
125
} vfs_triplet_t;
-
 
126
 
-
 
127
/**
-
 
128
 * Instances of this type represent an active, in-memory VFS node and any state
-
 
129
 * which may be associated with it.
-
 
130
 */
109
typedef struct {
131
typedef struct {
110
    int fs_handle;      /**< Global file system ID. */
132
    VFS_TRIPLET;        /**< Identity of the node. */
111
    int dev_handle;     /**< Global mount device devno. */
133
    atomic_t refcnt;    /**< Usage counter. */
112
    uint64_t index;     /**< Index of the node on its file system. */
-
 
113
} vfs_node_t;
134
} vfs_node_t;
114
 
135
 
115
/**
136
/**
116
 * Instances of this type represent an open file. If the file is opened by more
137
 * Instances of this type represent an open file. If the file is opened by more
117
 * than one task, there will be a separate structure allocated for each task.
138
 * than one task, there will be a separate structure allocated for each task.
Line 126... Line 147...
126
    off_t pos;
147
    off_t pos;
127
} vfs_file_t;
148
} vfs_file_t;
128
 
149
 
129
extern link_t fs_head;      /**< List of registered file systems. */
150
extern link_t fs_head;      /**< List of registered file systems. */
130
 
151
 
131
extern vfs_node_t rootfs;   /**< Root node of the root file system. */
152
extern vfs_triplet_t rootfs;    /**< Root node of the root file system. */
132
 
153
 
133
#define MAX_PATH_LEN        (64 * 1024)
154
#define MAX_PATH_LEN        (64 * 1024)
134
 
155
 
135
#define PLB_SIZE        (2 * MAX_PATH_LEN)
156
#define PLB_SIZE        (2 * MAX_PATH_LEN)
136
 
157
 
Line 148... Line 169...
148
extern int vfs_grab_phone(int);
169
extern int vfs_grab_phone(int);
149
extern void vfs_release_phone(int);
170
extern void vfs_release_phone(int);
150
 
171
 
151
extern int fs_name_to_handle(char *, bool);
172
extern int fs_name_to_handle(char *, bool);
152
 
173
 
153
extern int vfs_lookup_internal(char *, size_t, vfs_node_t *, vfs_node_t *);
174
extern int vfs_lookup_internal(char *, size_t, vfs_triplet_t *, vfs_pair_t *);
154
 
175
 
155
#define MAX_OPEN_FILES  128 
176
#define MAX_OPEN_FILES  128 
156
 
177
 
157
extern bool vfs_conn_open_files_init(void);
178
extern bool vfs_conn_open_files_init(void);
158
 
179