]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/fuse/inode.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[karo-tx-linux.git] / fs / fuse / inode.c
index 73ca6b72beafa0d19f5997bf7627b5046459c492..df00993ed108816b6902080d0ac98fd742407c12 100644 (file)
@@ -92,6 +92,7 @@ static struct inode *fuse_alloc_inode(struct super_block *sb)
        fi->attr_version = 0;
        fi->writectr = 0;
        fi->orig_ino = 0;
+       fi->state = 0;
        INIT_LIST_HEAD(&fi->write_files);
        INIT_LIST_HEAD(&fi->queued_writes);
        INIT_LIST_HEAD(&fi->writepages);
@@ -408,12 +409,12 @@ static int fuse_statfs(struct dentry *dentry, struct kstatfs *buf)
        struct fuse_statfs_out outarg;
        int err;
 
-       if (!fuse_allow_task(fc, current)) {
+       if (!fuse_allow_current_process(fc)) {
                buf->f_type = FUSE_SUPER_MAGIC;
                return 0;
        }
 
-       req = fuse_get_req(fc);
+       req = fuse_get_req_nopages(fc);
        if (IS_ERR(req))
                return PTR_ERR(req);
 
@@ -678,7 +679,7 @@ static int fuse_encode_fh(struct inode *inode, u32 *fh, int *max_len,
 
        if (*max_len < len) {
                *max_len = len;
-               return  255;
+               return  FILEID_INVALID;
        }
 
        nodeid = get_fuse_inode(inode)->nodeid;
@@ -863,6 +864,10 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
                                fc->dont_mask = 1;
                        if (arg->flags & FUSE_AUTO_INVAL_DATA)
                                fc->auto_inval_data = 1;
+                       if (arg->flags & FUSE_DO_READDIRPLUS)
+                               fc->do_readdirplus = 1;
+                       if (arg->flags & FUSE_READDIRPLUS_AUTO)
+                               fc->readdirplus_auto = 1;
                } else {
                        ra_pages = fc->max_read / PAGE_CACHE_SIZE;
                        fc->no_lock = 1;
@@ -889,7 +894,8 @@ static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req)
        arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC |
                FUSE_EXPORT_SUPPORT | FUSE_BIG_WRITES | FUSE_DONT_MASK |
                FUSE_SPLICE_WRITE | FUSE_SPLICE_MOVE | FUSE_SPLICE_READ |
-               FUSE_FLOCK_LOCKS | FUSE_IOCTL_DIR | FUSE_AUTO_INVAL_DATA;
+               FUSE_FLOCK_LOCKS | FUSE_IOCTL_DIR | FUSE_AUTO_INVAL_DATA |
+               FUSE_DO_READDIRPLUS | FUSE_READDIRPLUS_AUTO;
        req->in.h.opcode = FUSE_INIT;
        req->in.numargs = 1;
        req->in.args[0].size = sizeof(*arg);
@@ -1034,12 +1040,12 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
        /* only now - we want root dentry with NULL ->d_op */
        sb->s_d_op = &fuse_dentry_operations;
 
-       init_req = fuse_request_alloc();
+       init_req = fuse_request_alloc(0);
        if (!init_req)
                goto err_put_root;
 
        if (is_bdev) {
-               fc->destroy_req = fuse_request_alloc();
+               fc->destroy_req = fuse_request_alloc(0);
                if (!fc->destroy_req)
                        goto err_free_init_req;
        }