diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/dir.c | 4 | ||||
-rw-r--r-- | kernel/file.c | 2 | ||||
-rw-r--r-- | kernel/fuse_i.h | 22 | ||||
-rw-r--r-- | kernel/fuse_kernel.h | 10 |
4 files changed, 24 insertions, 14 deletions
diff --git a/kernel/dir.c b/kernel/dir.c index 076d966..38611c5 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -534,9 +534,9 @@ static int fuse_readdir(struct file *file, void *dstbuf, filldir_t filldir) struct page *page; struct inode *inode = file->f_dentry->d_inode; struct fuse_conn *fc = get_fuse_conn(inode); - struct fuse_req *req = fuse_get_request(fc); + struct fuse_req *req = fuse_get_request_nonint(fc); if (!req) - return -ERESTARTNOINTR; + return -EINTR; page = alloc_page(GFP_KERNEL); if (!page) { diff --git a/kernel/file.c b/kernel/file.c index 41e8d47..0405f7b 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -411,7 +411,7 @@ static int fuse_file_bigread(struct file *file, struct inode *inode, #endif /* KERNEL_2_6 */ static size_t fuse_send_write(struct fuse_req *req, struct file *file, - struct inode *inode, loff_t pos, size_t count) + struct inode *inode, loff_t pos, size_t count) { struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_file *ff = file->private_data; diff --git a/kernel/fuse_i.h b/kernel/fuse_i.h index 92fb703..e4d9588 100644 --- a/kernel/fuse_i.h +++ b/kernel/fuse_i.h @@ -321,11 +321,6 @@ struct fuse_conn { #endif }; -struct fuse_getdir_out_i { - int fd; - void *file; /* Used by kernel only */ -}; - static inline struct fuse_conn **get_fuse_conn_super_p(struct super_block *sb) { #ifdef KERNEL_2_6 @@ -385,6 +380,23 @@ void fuse_send_forget(struct fuse_conn *fc, struct fuse_req *req, unsigned long nodeid, int version); /** + * Send READ or READDIR request + */ +size_t fuse_send_read_common(struct fuse_req *req, struct file *file, + struct inode *inode, loff_t pos, size_t count, + int isdir); + +/** + * Send OPEN or OPENDIR request + */ +int fuse_open_common(struct inode *inode, struct file *file, int isdir); + +/** + * Send RELEASE or RELEASEDIR request + */ +int fuse_release_common(struct inode *inode, struct file *file, int isdir); + +/** * Initialise file operations on a regular file */ void fuse_init_file_inode(struct inode *inode); diff --git a/kernel/fuse_kernel.h b/kernel/fuse_kernel.h index 378791b..cd8f46f 100644 --- a/kernel/fuse_kernel.h +++ b/kernel/fuse_kernel.h @@ -67,7 +67,6 @@ enum fuse_opcode { FUSE_SETATTR = 4, FUSE_READLINK = 5, FUSE_SYMLINK = 6, - FUSE_GETDIR = 7, FUSE_MKNOD = 8, FUSE_MKDIR = 9, FUSE_UNLINK = 10, @@ -85,7 +84,10 @@ enum fuse_opcode { FUSE_LISTXATTR = 23, FUSE_REMOVEXATTR = 24, FUSE_FLUSH = 25, - FUSE_INIT = 26 + FUSE_INIT = 26, + FUSE_OPENDIR = 27, + FUSE_READDIR = 28, + FUSE_RELEASEDIR = 29 }; /* Conservative buffer size for the client */ @@ -117,10 +119,6 @@ struct fuse_attr_out { struct fuse_attr attr; }; -struct fuse_getdir_out { - __u32 fd; -}; - struct fuse_mknod_in { __u32 mode; __u32 rdev; |