diff options
author | 2005-09-08 14:28:54 +0000 | |
---|---|---|
committer | 2005-09-08 14:28:54 +0000 | |
commit | fcf9f8d616b86886bfbbff6e0940a2fe74ac8ad5 (patch) | |
tree | e2e9cc59b315facedb1046672293fce4eb39c7a4 /kernel | |
parent | 079db8dcbd74307a163817cebffced1cb4d7b407 (diff) |
revert stuff
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/dev.c | 17 | ||||
-rw-r--r-- | kernel/dir.c | 51 | ||||
-rw-r--r-- | kernel/file.c | 146 | ||||
-rw-r--r-- | kernel/fuse_i.h | 9 | ||||
-rw-r--r-- | kernel/fuse_kernel.h | 33 |
5 files changed, 16 insertions, 240 deletions
diff --git a/kernel/dev.c b/kernel/dev.c index 2c71a79..0f4de86 100644 --- a/kernel/dev.c +++ b/kernel/dev.c @@ -163,13 +163,11 @@ static void fuse_putback_request(struct fuse_conn *fc, struct fuse_req *req) else fuse_request_free(req); - if (!req->unaccounted) { - /* If we are in debt decrease that first */ - if (fc->outstanding_debt) - fc->outstanding_debt--; - else - up(&fc->outstanding_sem); - } + /* If we are in debt decrease that first */ + if (fc->outstanding_debt) + fc->outstanding_debt--; + else + up(&fc->outstanding_sem); spin_unlock(&fuse_lock); } @@ -324,10 +322,9 @@ static void queue_request(struct fuse_conn *fc, struct fuse_req *req) req->in.h.unique = fc->reqctr; req->in.h.len = sizeof(struct fuse_in_header) + len_args(req->in.numargs, (struct fuse_arg *) req->in.args); - if (!req->preallocated && !req->unaccounted) { + if (!req->preallocated) { /* If request is not preallocated (either FORGET or - RELEASE), and is not unaccounted (SETLKW), - then still decrease outstanding_sem, so + RELEASE), then still decrease outstanding_sem, so user can't open infinite number of files while not processing the RELEASE requests. However for efficiency do it without blocking, so if down() diff --git a/kernel/dir.c b/kernel/dir.c index 826f444..1ae265a 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -24,7 +24,7 @@ static inline unsigned long time_to_jiffies(unsigned long sec, unsigned long nsec) { struct timespec ts = {sec, nsec}; - return jiffies + ((sec || nsec) ? timespec_to_jiffies(&ts) : 0) - 1; + return jiffies + timespec_to_jiffies(&ts); } static void fuse_lookup_init(struct fuse_req *req, struct inode *dir, @@ -476,52 +476,17 @@ static int fuse_revalidate(struct dentry *entry) return fuse_do_getattr(inode); } -#ifdef KERNEL_2_6 -static int fuse_access(struct inode *inode, int mask) -{ - struct fuse_conn *fc = get_fuse_conn(inode); - struct fuse_req *req; - struct fuse_access_in inarg; - int err; - - if (fc->no_access) - return 0; - - req = fuse_get_request(fc); - if (!req) - return -EINTR; - - memset(&inarg, 0, sizeof(inarg)); - inarg.mask = mask; - req->in.h.opcode = FUSE_ACCESS; - req->in.h.nodeid = get_node_id(inode); - req->inode = inode; - req->in.numargs = 1; - req->in.args[0].size = sizeof(inarg); - req->in.args[0].value = &inarg; - request_send(fc, req); - err = req->out.h.error; - fuse_put_request(fc, req); - if (err == -ENOSYS) { - fc->no_access = 1; - err = 0; - } - return err; -} -#endif - static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd) { struct fuse_conn *fc = get_fuse_conn(inode); - int err; if (!fuse_allow_task(fc, current)) return -EACCES; else if (fc->flags & FUSE_DEFAULT_PERMISSIONS) { #ifdef KERNEL_2_6_10_PLUS - err = generic_permission(inode, mask, NULL); + int err = generic_permission(inode, mask, NULL); #else - err = vfs_permission(inode, mask); + int err = vfs_permission(inode, mask); #endif /* If permission is denied, try to refresh file @@ -545,6 +510,8 @@ static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd) This is actually not so grave, since the user can simply keep access to the file/directory anyway by keeping it open... */ + + return err; } else { int mode = inode->i_mode; if ((mask & MAY_WRITE) && IS_RDONLY(inode) && @@ -552,14 +519,8 @@ static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd) return -EROFS; if ((mask & MAY_EXEC) && !S_ISDIR(mode) && !(mode & S_IXUGO)) return -EACCES; - - err = 0; -#ifdef KERNEL_2_6 - if (nd && (nd->flags & LOOKUP_ACCESS)) - err = fuse_access(inode, mask); -#endif + return 0; } - return err; } static int parse_dirfile(char *buf, size_t nbytes, struct file *file, diff --git a/kernel/file.c b/kernel/file.c index 0b7ee5a..3177946 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -73,13 +73,12 @@ int fuse_open_common(struct inode *inode, struct file *file, int isdir) } else { if (!isdir && (outarg.open_flags & FOPEN_DIRECT_IO)) file->f_op = &fuse_direct_io_file_operations; - if (!(outarg.open_flags & FOPEN_KEEP_CACHE)) { + if (!(outarg.open_flags & FOPEN_KEEP_CACHE)) #ifdef KERNEL_2_6 invalidate_inode_pages(inode->i_mapping); #else invalidate_inode_pages(inode); #endif - } ff->fh = outarg.fh; file->private_data = ff; } @@ -608,147 +607,6 @@ static ssize_t fuse_direct_write(struct file *file, const char __user *buf, return res; } -static int default_getlk(struct file *file, struct file_lock *fl) -{ - struct file_lock *cfl = posix_test_lock(file, fl); - fl->fl_type = F_UNLCK; - if (cfl) - *fl = *cfl; - return 0; -} - -static void convert_file_lock(const struct file_lock *fl, - struct fuse_file_lock *ffl) -{ - ffl->start = fl->fl_start; - ffl->end = fl->fl_end; - ffl->owner = (unsigned long) fl->fl_owner; - ffl->pid = fl->fl_pid; - ffl->type = fl->fl_type; -} - -static int convert_fuse_file_lock(const struct fuse_file_lock *ffl, - struct file_lock *fl) -{ - if (ffl->start < 0 || ffl->end < 0 || ffl->end <= ffl->start) - return -EIO; - - if (ffl->type != F_UNLCK && ffl->type != F_RDLCK && - ffl->type != F_WRLCK) - return -EIO; - - fl->fl_start = ffl->start; - fl->fl_end = ffl->end; - fl->fl_owner = (fl_owner_t) (unsigned long) ffl->owner; - fl->fl_pid = ffl->pid; - fl->fl_type = ffl->type; - - return 0; -} - -static int fuse_getlk(struct file *file, struct file_lock *fl) -{ - struct inode *inode = file->f_dentry->d_inode; - struct fuse_conn *fc = get_fuse_conn(inode); - struct fuse_req *req; - struct fuse_lk_in_out arg; - int err; - - if (fc->no_lk) - return default_getlk(file, fl); - - req = fuse_get_request(fc); - if (!req) - return -EINTR; - - memset(&arg, 0, sizeof(arg)); - convert_file_lock(fl, &arg.lk); - req->in.h.opcode = FUSE_GETLK; - req->in.h.nodeid = get_node_id(inode); - req->inode = inode; - req->in.numargs = 1; - req->in.args[0].size = sizeof(arg); - req->in.args[0].value = &arg; - req->out.numargs = 1; - req->out.args[0].size = sizeof(arg); - req->out.args[0].value = &arg; - request_send(fc, req); - err = req->out.h.error; - fuse_put_request(fc, req); - if (!err) - err = convert_fuse_file_lock(&arg.lk, fl); - else if (err == -ENOSYS) { - fc->no_lk = 1; - err = default_getlk(file, fl); - } - - return err; -} - -static int fuse_setlk(struct file *file, struct file_lock *fl, int sleep) -{ - struct inode *inode = file->f_dentry->d_inode; - struct fuse_conn *fc = get_fuse_conn(inode); - struct fuse_req *req; - struct fuse_lk_in_out arg; - int err; - - if (fc->no_lk) - return -ENOSYS; - - if (!sleep) { - req = fuse_get_request(fc); - if (!req) - return -EINTR; - } else { - /* SETLKW can wait indefinately so we do not use up a - request from the pool, but allocate an unaccounted - new one */ - req = fuse_request_alloc(); - if (!req) - return -ENOMEM; - req->unaccounted = 1; - } - - memset(&arg, 0, sizeof(arg)); - convert_file_lock(fl, &arg.lk); - req->in.h.opcode = sleep ? FUSE_SETLKW : FUSE_SETLK; - req->in.h.nodeid = get_node_id(inode); - req->inode = inode; - req->in.numargs = 1; - req->in.args[0].size = sizeof(arg); - req->in.args[0].value = &arg; - request_send(fc, req); - err = req->out.h.error; - fuse_put_request(fc, req); - if (err == -ENOSYS) - fc->no_lk = 1; - - return err; -} - -static int fuse_file_lock(struct file *file, int cmd, struct file_lock *fl) -{ - if (cmd == F_GETLK) - return fuse_getlk(file, fl); - else { -#ifdef KERNEL_2_6 - int err = fuse_setlk(file, fl, fl->fl_flags & FL_SLEEP); -#else - int err = fuse_setlk(file, fl, - cmd == F_SETLKW || cmd == F_SETLKW64); -#endif -#ifdef KERNEL_2_6_9_PLUS - if (err == -ENOSYS) - err = posix_lock_file_wait(file, fl); -#else - if (err == -ENOSYS) - err = 0; -#endif - return err; - } -} - #ifndef KERNEL_2_6 static ssize_t fuse_file_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) @@ -800,7 +658,6 @@ static struct file_operations fuse_file_operations = { .flush = fuse_flush, .release = fuse_release, .fsync = fuse_fsync, - .lock = fuse_file_lock, #ifdef KERNEL_2_6 .sendfile = generic_file_sendfile, #endif @@ -814,7 +671,6 @@ static struct file_operations fuse_direct_io_file_operations = { .flush = fuse_flush, .release = fuse_release, .fsync = fuse_fsync, - .lock = fuse_file_lock, /* no mmap and sendfile */ }; diff --git a/kernel/fuse_i.h b/kernel/fuse_i.h index 8b13d65..1543553 100644 --- a/kernel/fuse_i.h +++ b/kernel/fuse_i.h @@ -202,9 +202,6 @@ struct fuse_req { /** The request is preallocated */ unsigned preallocated:1; - /** The request is not accounted via outstanding_{sem,debt} */ - unsigned unaccounted:1; - /** The request was interrupted */ unsigned interrupted:1; @@ -340,12 +337,6 @@ struct fuse_conn { /** Is removexattr not implemented by fs? */ unsigned no_removexattr : 1; - /** Are file locking primitives not implemented by fs? */ - unsigned no_lk : 1; - - /** Is access not implemented by fs? */ - unsigned no_access : 1; - #ifdef KERNEL_2_6 /** Backing dev info */ struct backing_dev_info bdi; diff --git a/kernel/fuse_kernel.h b/kernel/fuse_kernel.h index c668c68..acbeb96 100644 --- a/kernel/fuse_kernel.h +++ b/kernel/fuse_kernel.h @@ -55,15 +55,6 @@ struct fuse_kstatfs { __u32 namelen; }; -struct fuse_file_lock { - __u64 start; - __u64 end; - __u64 owner; - __u32 pid; - __u32 type; -}; - -/** Valid attribute mask used in the SETATTR request */ #define FATTR_MODE (1 << 0) #define FATTR_UID (1 << 1) #define FATTR_GID (1 << 2) @@ -109,13 +100,7 @@ enum fuse_opcode { FUSE_OPENDIR = 27, FUSE_READDIR = 28, FUSE_RELEASEDIR = 29, - FUSE_FSYNCDIR = 30, - FUSE_GETLK = 31, - FUSE_SETLK = 32, - FUSE_SETLKW = 33, - FUSE_ACCESS = 34, - FUSE_CREATE = 35, - FUSE_FSETATTR = 36 + FUSE_FSYNCDIR = 30 }; /* Conservative buffer size for the client */ @@ -171,14 +156,9 @@ struct fuse_setattr_in { struct fuse_attr attr; }; -struct fuse_fsetattr_in { - __u64 fh; - struct fuse_setattr_in setattr; -}; - struct fuse_open_in { __u32 flags; - __u32 mode; + __u32 padding; }; struct fuse_open_out { @@ -243,15 +223,6 @@ struct fuse_getxattr_out { __u32 padding; }; -struct fuse_lk_in_out { - struct fuse_file_lock lk; -}; - -struct fuse_access_in { - __u32 mask; - __u32 padding; -}; - struct fuse_init_in_out { __u32 major; __u32 minor; |