diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-11-14 09:19:51 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-11-14 09:19:51 +0000 |
commit | 08ddb8e5e0af8c1326607f4d06c0dbc85733e483 (patch) | |
tree | 55617c609dc06985307a88baba5dbedb7c2d5d0d /kernel | |
parent | 30e8eb3e135291717eceaae69162fceb91d30aa1 (diff) | |
download | libfuse-08ddb8e5e0af8c1326607f4d06c0dbc85733e483.tar.gz |
merge from 2_0_merge2 to 2_1_pre1
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/configure.ac | 2 | ||||
-rw-r--r-- | kernel/dev.c | 16 | ||||
-rw-r--r-- | kernel/dir.c | 21 | ||||
-rw-r--r-- | kernel/file.c | 4 | ||||
-rw-r--r-- | kernel/fuse_i.h | 5 | ||||
-rw-r--r-- | kernel/inode.c | 2 |
6 files changed, 33 insertions, 17 deletions
diff --git a/kernel/configure.ac b/kernel/configure.ac index 0dad9cb..7be6890 100644 --- a/kernel/configure.ac +++ b/kernel/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(fuse-kernel, 2.1-pre0) +AC_INIT(fuse-kernel, 2.1-pre1) AC_CONFIG_HEADERS([config.h]) AC_PROG_INSTALL diff --git a/kernel/dev.c b/kernel/dev.c index 0c601d2..d353c7f 100644 --- a/kernel/dev.c +++ b/kernel/dev.c @@ -139,24 +139,22 @@ static struct fuse_req *do_get_request(struct fuse_conn *fc) struct fuse_req *fuse_get_request(struct fuse_conn *fc) { - struct fuse_req *req; - if (down_interruptible(&fc->unused_sem)) return NULL; + return do_get_request(fc); +} - req = do_get_request(fc); - return req; +struct fuse_req *fuse_get_request_nonint(struct fuse_conn *fc) +{ + down(&fc->unused_sem); + return do_get_request(fc); } struct fuse_req *fuse_get_request_nonblock(struct fuse_conn *fc) { - struct fuse_req *req; - if (down_trylock(&fc->unused_sem)) return NULL; - - req = do_get_request(fc); - return req; + return do_get_request(fc); } void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req) diff --git a/kernel/dir.c b/kernel/dir.c index a2fe6a8..e322544 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -600,7 +600,12 @@ static int _fuse_permission(struct inode *inode, int mask) (!(fc->flags & FUSE_ALLOW_ROOT) || current->fsuid != 0)) return -EACCES; else if (fc->flags & FUSE_DEFAULT_PERMISSIONS) { - int err = vfs_permission(inode, mask); + int err; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) + err = vfs_permission(inode, mask); +#else + err = generic_permission(inode, mask, NULL); +#endif /* If permission is denied, try to refresh file attributes. This is also needed, because the root @@ -608,8 +613,13 @@ static int _fuse_permission(struct inode *inode, int mask) if (err == -EACCES) { err = fuse_do_getattr(inode); - if (!err) + if (!err) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) err = vfs_permission(inode, mask); +#else + err = generic_permission(inode, mask, NULL); +#endif + } } /* FIXME: Need some mechanism to revoke permissions: @@ -853,9 +863,12 @@ static int fuse_setattr(struct dentry *entry, struct iattr *attr) if (attr->ia_valid & ATTR_SIZE) { unsigned long limit; is_truncate = 1; - +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) limit = current->rlim[RLIMIT_FSIZE].rlim_cur; - if (limit != RLIM_INFINITY && attr->ia_size > limit) { +#else + limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur; +#endif + if (limit != RLIM_INFINITY && attr->ia_size > (loff_t) limit) { send_sig(SIGXFSZ, current, 0); return -EFBIG; } diff --git a/kernel/file.c b/kernel/file.c index a08d236..f89bfb7 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -378,7 +378,7 @@ static int fuse_readpages_fill(void *_data, struct page *page) req->pages[req->num_pages - 1]->index + 1 != page->index)) { struct fuse_conn *fc = INO_FC(page->mapping->host); fuse_send_readpages(req, data->file, inode); - data->req = req = fuse_get_request(fc); + data->req = req = fuse_get_request_nonint(fc); } req->pages[req->num_pages] = page; req->num_pages ++; @@ -392,7 +392,7 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, struct fuse_conn *fc = INO_FC(inode); struct fuse_readpages_data data; - data.req = fuse_get_request(fc); + data.req = fuse_get_request_nonint(fc); data.file = file; data.inode = inode; diff --git a/kernel/fuse_i.h b/kernel/fuse_i.h index 40dedb2..58d6466 100644 --- a/kernel/fuse_i.h +++ b/kernel/fuse_i.h @@ -350,6 +350,11 @@ void fuse_reset_request(struct fuse_req *req); struct fuse_req *fuse_get_request(struct fuse_conn *fc); /** + * Reserve a preallocated request, non-interruptible + */ +struct fuse_req *fuse_get_request_nonint(struct fuse_conn *fc); + +/** * Reserve a preallocated request, non-blocking */ struct fuse_req *fuse_get_request_nonblock(struct fuse_conn *fc); diff --git a/kernel/inode.c b/kernel/inode.c index 591a4df..641d03a 100644 --- a/kernel/inode.c +++ b/kernel/inode.c @@ -367,7 +367,7 @@ static struct fuse_conn *get_conn(struct file *file, struct super_block *sb) struct inode *ino; ino = file->f_dentry->d_inode; - if (!ino || !proc_fuse_dev || + if (!ino || !proc_fuse_dev || strcmp(ino->i_sb->s_type->name, "proc") != 0 || proc_fuse_dev->low_ino != ino->i_ino) { printk("FUSE: bad communication file descriptor\n"); |