From fcf9f8d616b86886bfbbff6e0940a2fe74ac8ad5 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Thu, 8 Sep 2005 14:28:54 +0000 Subject: [PATCH] revert stuff --- ChangeLog | 25 ++----- NEWS | 4 -- include/fuse_lowlevel.h | 16 +---- kernel/dev.c | 17 ++--- kernel/dir.c | 51 ++------------ kernel/file.c | 146 +--------------------------------------- kernel/fuse_i.h | 9 --- kernel/fuse_kernel.h | 33 +-------- lib/fuse.c | 86 ----------------------- lib/fuse_lowlevel.c | 118 -------------------------------- 10 files changed, 21 insertions(+), 484 deletions(-) diff --git a/ChangeLog b/ChangeLog index a33e6fd..c41cf7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,20 +1,13 @@ -2005-09-02 Miklos Szeredi +2005-09-08 Miklos Szeredi + + * Revert lock and access operations. Postpone these until 2.5. - * Don't call ACCESS on open. Will do this properly with atomic - open/create +2005-09-02 Miklos Szeredi * Fix compile warning on 2.6.13 and later * Fix compilation on old kernels -2005-08-25 Miklos Szeredi - - * lib: add userspace side of ftruncate() method for experimentation - -2005-08-23 Miklos Szeredi - - * lib: add userspace side of create() method for experimentation - 2005-08-19 Miklos Szeredi * lib: always refresh directory contents after rewinddir() to @@ -52,8 +45,6 @@ * Added missing symbols to versionscript (Joshua J. Berry) - * Do not limit number of file locks being waited upon - * kernel: implement two flags, open can set: 'direct_io' and 'keep_cache'. These correspond exactly to mount options 'direct_io' and 'kernel_cache', but allow a per-open setting. @@ -63,12 +54,6 @@ the respective open flag is set, otherwise the open flag is left unmodified (so the filesystem can set it). - * Add ACCESS operation. This is called from the access() system - call if 'default_permissions' mount option is not given - - * Perform ACCESS operation in case of open(), if the file wasn't - newly created - * lib (highlevel): make open method optional 2005-07-28 Miklos Szeredi @@ -91,8 +76,6 @@ 2,147,483,648 operations, so most people won't care. Thanks to Franco Broi for the report and testing. - * Added file locking methods to kernel and low-level API. - 2005-07-21 Miklos Szeredi * Don't change mtime/ctime/atime to local time on read/write. diff --git a/NEWS b/NEWS index ba1d668..f87dab0 100644 --- a/NEWS +++ b/NEWS @@ -15,10 +15,6 @@ What is new in 2.4 - Low level (inode based) API added - - File locking primitives added to kernel and low level API - - - Add 'access' method to kernel, and library APIs - - Allow 'direct_io' and 'keep_cache' options to be set on a case-by-case basis on open. diff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h index a1c475e..aecd3d6 100644 --- a/include/fuse_lowlevel.h +++ b/include/fuse_lowlevel.h @@ -81,7 +81,6 @@ struct fuse_lowlevel_ops { void (*getattr)(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); void (*setattr)(fuse_req_t req, fuse_ino_t ino, struct stat *attr, int to_set, struct fuse_file_info *fi); - void (*access) (fuse_req_t req, fuse_ino_t ino, int mask); void (*readlink)(fuse_req_t req, fuse_ino_t ino); void (*mknod) (fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, dev_t rdev); @@ -95,8 +94,6 @@ struct fuse_lowlevel_ops { fuse_ino_t newparent, const char *newname); void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent, const char *newname); - void (*create) (fuse_req_t req, fuse_ino_t parent, const char *name, - mode_t mode, struct fuse_file_info *fi); void (*open) (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); void (*read) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi); @@ -120,10 +117,6 @@ struct fuse_lowlevel_ops { size_t size); void (*listxattr)(fuse_req_t req, fuse_ino_t ino, size_t size); void (*removexattr)(fuse_req_t req, fuse_ino_t ino, const char *name); - void (*getlk) (fuse_req_t req, fuse_ino_t ino, - const struct fuse_lock_param *lk); - void (*setlk) (fuse_req_t req, fuse_ino_t ino, int sleep, - const struct fuse_lock_param *lk); }; /* ------------------------------------------ */ @@ -134,13 +127,9 @@ int fuse_reply_err(fuse_req_t req, int err); /* forget */ int fuse_reply_none(fuse_req_t req); -/* lookup, create, mknod, mkdir, symlink, link */ +/* lookup, mknod, mkdir, symlink, link */ int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e); -/* create */ -int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e, - const struct fuse_file_info *fi); - /* getattr, setattr */ int fuse_reply_attr(fuse_req_t req, const struct stat *attr, double attr_timeout); @@ -163,9 +152,6 @@ int fuse_reply_statfs(fuse_req_t req, const struct statfs *stbuf); /* getxattr, listxattr */ int fuse_reply_xattr(fuse_req_t req, size_t count); -/* getlk */ -int fuse_reply_getlk(fuse_req_t req, const struct fuse_lock_param *lk); - /* ------------------------------------------ */ /* return the size of a directory entry */ 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; diff --git a/lib/fuse.c b/lib/fuse.c index 7f8ed3d..2209212 100644 --- a/lib/fuse.c +++ b/lib/fuse.c @@ -727,25 +727,6 @@ static void fuse_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr, reply_err(req, err); } -static void fuse_access(fuse_req_t req, fuse_ino_t ino, int mask) -{ - struct fuse *f = req_fuse_prepare(req); - char *path; - int err; - - err = -ENOENT; - pthread_rwlock_rdlock(&f->tree_lock); - path = get_path(f, ino); - if (path != NULL) { - err = -ENOSYS; - if (f->op.access) - err = f->op.access(path, mask); - free(path); - } - pthread_rwlock_unlock(&f->tree_lock); - reply_err(req, err); -} - static void fuse_readlink(fuse_req_t req, fuse_ino_t ino) { struct fuse *f = req_fuse_prepare(req); @@ -981,71 +962,6 @@ static void fuse_link(fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent, reply_entry(req, &e, err); } -static void fuse_create(fuse_req_t req, fuse_ino_t parent, const char *name, - mode_t mode, struct fuse_file_info *fi) -{ - struct fuse *f = req_fuse_prepare(req); - struct fuse_entry_param e; - char *path; - int opened = 0; - int err; - - err = -ENOENT; - pthread_rwlock_rdlock(&f->tree_lock); - path = get_path_name(f, parent, name); - if (path != NULL) { - err = -ENOSYS; - if (f->op.create && f->op.getattr) { - int oerr = f->op.create(path, mode, fi); - if (!oerr) - opened = 1; - - if (f->flags & FUSE_DEBUG) { - if (opened) - printf("CREATE[%lu] flags: 0x%x %s\n", fi->fh, fi->flags, path); - else - printf("LOOKUP(CREATE) %s\n", path); - fflush(stdout); - } - - err = lookup_path(f, parent, name, path, &e); - if (err) { - if (f->op.release && opened) - f->op.release(path, fi); - } else if (opened != (S_ISREG(e.attr.st_mode) != 0)) { - err = oerr ? oerr : -EIO; - if (f->op.release && opened) - f->op.release(path, fi); - forget_node(f, e.ino, 1); - } - } - } - - if (!err) { - if (f->flags & FUSE_DIRECT_IO) - fi->direct_io = 1; - if (f->flags & FUSE_KERNEL_CACHE) - fi->keep_cache = 1; - - pthread_mutex_lock(&f->lock); - if (fuse_reply_create(req, &e, fi) == -ENOENT) { - /* The open syscall was interrupted, so it must be cancelled */ - if(f->op.release && opened) - f->op.release(path, fi); - forget_node(f, e.ino, 1); - } else { - struct node *node = get_node(f, e.ino); - node->open_count ++; - } - pthread_mutex_unlock(&f->lock); - } else - reply_err(req, err); - - if (path) - free(path); - pthread_rwlock_unlock(&f->tree_lock); -} - static void fuse_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) { @@ -1680,7 +1596,6 @@ static struct fuse_lowlevel_ops fuse_path_ops = { .forget = fuse_forget, .getattr = fuse_getattr, .setattr = fuse_setattr, - .access = fuse_access, .readlink = fuse_readlink, .mknod = fuse_mknod, .mkdir = fuse_mkdir, @@ -1689,7 +1604,6 @@ static struct fuse_lowlevel_ops fuse_path_ops = { .symlink = fuse_symlink, .rename = fuse_rename, .link = fuse_link, - .create = fuse_create, .open = fuse_open, .read = fuse_read, .write = fuse_write, diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index 3bbc296..a5a5eb6 100644 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -69,12 +69,6 @@ static const char *opname(enum fuse_opcode opcode) case FUSE_READDIR: return "READDIR"; case FUSE_RELEASEDIR: return "RELEASEDIR"; case FUSE_FSYNCDIR: return "FSYNCDIR"; - case FUSE_GETLK: return "GETLK"; - case FUSE_SETLK: return "SETLK"; - case FUSE_SETLKW: return "SETLKW"; - case FUSE_ACCESS: return "ACCESS"; - case FUSE_CREATE: return "CREATE"; - case FUSE_FSETATTR: return "FSETATTR"; default: return "???"; } } @@ -115,26 +109,6 @@ static void convert_attr(const struct fuse_attr *attr, struct stat *stbuf) #endif } -static void convert_file_lock(const struct fuse_file_lock *ffl, - struct fuse_lock_param *lk) -{ - lk->type = ffl->type; - lk->start = ffl->start; - lk->end = ffl->end; - lk->owner = ffl->owner; - lk->pid = ffl->pid; -} - -static void convert_lock_param(const struct fuse_lock_param *lk, - struct fuse_file_lock *ffl) -{ - ffl->type = lk->type; - ffl->start = lk->start; - ffl->end = lk->end; - ffl->owner = lk->owner; - ffl->pid = lk->pid; -} - static size_t iov_length(const struct iovec *iov, size_t count) { size_t seg; @@ -367,16 +341,6 @@ int fuse_reply_xattr(fuse_req_t req, size_t count) return send_reply_ok(req, &arg, sizeof(arg)); } -int fuse_reply_getlk(fuse_req_t req, const struct fuse_lock_param *lk) -{ - struct fuse_lk_in_out arg; - - memset(&arg, 0, sizeof(arg)); - convert_lock_param(lk, &arg.lk); - - return send_reply_ok(req, &arg, sizeof(arg)); -} - static void do_lookup(fuse_req_t req, fuse_ino_t nodeid, char *name) { if (req->f->op.lookup) @@ -412,24 +376,6 @@ static void do_setattr(fuse_req_t req, fuse_ino_t nodeid, fuse_reply_err(req, ENOSYS); } -static void do_fsetattr(fuse_req_t req, fuse_ino_t nodeid, - struct fuse_fsetattr_in *arg) -{ - struct fuse_file_info fi; - - memset(&fi, 0, sizeof(fi)); - fi.fh = arg->fh; - do_setattr(req, nodeid, &arg->setattr, &fi); -} - -static void do_access(fuse_req_t req, fuse_ino_t nodeid, - struct fuse_access_in *arg) -{ - if (req->f->op.access) - req->f->op.access(req, nodeid, arg->mask); - else - fuse_reply_err(req, ENOSYS); -} static void do_readlink(fuse_req_t req, fuse_ino_t nodeid) { if (req->f->op.readlink) @@ -502,20 +448,6 @@ static void do_link(fuse_req_t req, fuse_ino_t nodeid, fuse_reply_err(req, ENOSYS); } -static void do_create(fuse_req_t req, fuse_ino_t nodeid, - struct fuse_open_in *arg) -{ - if (req->f->op.create) { - struct fuse_file_info fi; - - memset(&fi, 0, sizeof(fi)); - fi.flags = arg->flags; - - req->f->op.create(req, nodeid, PARAM(arg), arg->mode, &fi); - } else - fuse_reply_err(req, ENOSYS); -} - static void do_open(fuse_req_t req, fuse_ino_t nodeid, struct fuse_open_in *arg) { @@ -706,32 +638,6 @@ static void do_removexattr(fuse_req_t req, fuse_ino_t nodeid, char *name) fuse_reply_err(req, ENOSYS); } -static void do_getlk(fuse_req_t req, fuse_ino_t nodeid, - struct fuse_lk_in_out *arg) -{ - if (req->f->op.getlk) { - struct fuse_lock_param lk; - - memset(&lk, 0, sizeof(lk)); - convert_file_lock(&arg->lk, &lk); - req->f->op.getlk(req, nodeid, &lk); - } else - fuse_reply_err(req, ENOSYS); -} - -static void do_setlk(fuse_req_t req, fuse_ino_t nodeid, int issleep, - struct fuse_lk_in_out *arg) -{ - if (req->f->op.setlk) { - struct fuse_lock_param lk; - - memset(&lk, 0, sizeof(lk)); - convert_file_lock(&arg->lk, &lk); - req->f->op.setlk(req, nodeid, issleep, &lk); - } else - fuse_reply_err(req, ENOSYS); -} - static void do_init(fuse_req_t req, struct fuse_init_in_out *arg) { struct fuse_init_in_out outarg; @@ -827,10 +733,6 @@ static void fuse_ll_process(void *data, const char *buf, size_t len, do_setattr(req, in->nodeid, (struct fuse_setattr_in *) inarg, NULL); break; - case FUSE_FSETATTR: - do_fsetattr(req, in->nodeid, (struct fuse_fsetattr_in *) inarg); - break; - case FUSE_READLINK: do_readlink(req, in->nodeid); break; @@ -924,26 +826,6 @@ static void fuse_ll_process(void *data, const char *buf, size_t len, do_fsyncdir(req, in->nodeid, (struct fuse_fsync_in *) inarg); break; - case FUSE_GETLK: - do_getlk(req, in->nodeid, (struct fuse_lk_in_out *) inarg); - break; - - case FUSE_SETLK: - do_setlk(req, in->nodeid, 0, (struct fuse_lk_in_out *) inarg); - break; - - case FUSE_SETLKW: - do_setlk(req, in->nodeid, 1, (struct fuse_lk_in_out *) inarg); - break; - - case FUSE_ACCESS: - do_access(req, in->nodeid, (struct fuse_access_in *) inarg); - break; - - case FUSE_CREATE: - do_create(req, in->nodeid, (struct fuse_open_in *) inarg); - break; - default: fuse_reply_err(req, ENOSYS); } -- 2.30.2