aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorGravatar Miklos Szeredi <miklos@szeredi.hu>2005-09-08 14:28:54 +0000
committerGravatar Miklos Szeredi <miklos@szeredi.hu>2005-09-08 14:28:54 +0000
commitfcf9f8d616b86886bfbbff6e0940a2fe74ac8ad5 (patch)
treee2e9cc59b315facedb1046672293fce4eb39c7a4 /kernel
parent079db8dcbd74307a163817cebffced1cb4d7b407 (diff)
revert stuff
Diffstat (limited to 'kernel')
-rw-r--r--kernel/dev.c17
-rw-r--r--kernel/dir.c51
-rw-r--r--kernel/file.c146
-rw-r--r--kernel/fuse_i.h9
-rw-r--r--kernel/fuse_kernel.h33
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;