diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2005-09-09 16:10:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-09 17:03:47 -0400 |
commit | 04730fef1f9c7277e5c730b193e681ac095b0507 (patch) | |
tree | 3694ea435eb38f10dadc5c8b6abd603a7e10f52e /fs/fuse/fuse_i.h | |
parent | 413ef8cb302511d8e995e2b0e5517ee1a65b9c77 (diff) |
[PATCH] fuse: transfer readdir data through device
This patch removes a long lasting "hack" in FUSE, which used a separate
channel (a file descriptor refering to a disk-file) to transfer directory
contents from userspace to the kernel.
The patch adds three new operations (OPENDIR, READDIR, RELEASEDIR), which
have semantics and implementation exactly maching the respective file
operations (OPEN, READ, RELEASE).
This simplifies the directory reading code. Also disk space is not
necessary, which can be important in embedded systems.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/fuse/fuse_i.h')
-rw-r--r-- | fs/fuse/fuse_i.h | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 0af1ac646927..8593d5bae7a6 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h | |||
@@ -273,11 +273,6 @@ struct fuse_conn { | |||
273 | struct backing_dev_info bdi; | 273 | struct backing_dev_info bdi; |
274 | }; | 274 | }; |
275 | 275 | ||
276 | struct fuse_getdir_out_i { | ||
277 | int fd; | ||
278 | void *file; /* Used by kernel only */ | ||
279 | }; | ||
280 | |||
281 | static inline struct fuse_conn **get_fuse_conn_super_p(struct super_block *sb) | 276 | static inline struct fuse_conn **get_fuse_conn_super_p(struct super_block *sb) |
282 | { | 277 | { |
283 | return (struct fuse_conn **) &sb->s_fs_info; | 278 | return (struct fuse_conn **) &sb->s_fs_info; |
@@ -334,6 +329,23 @@ void fuse_send_forget(struct fuse_conn *fc, struct fuse_req *req, | |||
334 | unsigned long nodeid, u64 nlookup); | 329 | unsigned long nodeid, u64 nlookup); |
335 | 330 | ||
336 | /** | 331 | /** |
332 | * Send READ or READDIR request | ||
333 | */ | ||
334 | size_t fuse_send_read_common(struct fuse_req *req, struct file *file, | ||
335 | struct inode *inode, loff_t pos, size_t count, | ||
336 | int isdir); | ||
337 | |||
338 | /** | ||
339 | * Send OPEN or OPENDIR request | ||
340 | */ | ||
341 | int fuse_open_common(struct inode *inode, struct file *file, int isdir); | ||
342 | |||
343 | /** | ||
344 | * Send RELEASE or RELEASEDIR request | ||
345 | */ | ||
346 | int fuse_release_common(struct inode *inode, struct file *file, int isdir); | ||
347 | |||
348 | /** | ||
337 | * Initialise file operations on a regular file | 349 | * Initialise file operations on a regular file |
338 | */ | 350 | */ |
339 | void fuse_init_file_inode(struct inode *inode); | 351 | void fuse_init_file_inode(struct inode *inode); |