linux/fs/fuse/inode.c
<<
>>
Prefs
   1/*
   2  FUSE: Filesystem in Userspace
   3  Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
   4
   5  This program can be distributed under the terms of the GNU GPL.
   6  See the file COPYING.
   7*/
   8
   9#include "fuse_i.h"
  10
  11#include <linux/pagemap.h>
  12#include <linux/slab.h>
  13#include <linux/file.h>
  14#include <linux/seq_file.h>
  15#include <linux/init.h>
  16#include <linux/module.h>
  17#include <linux/moduleparam.h>
  18#include <linux/parser.h>
  19#include <linux/statfs.h>
  20#include <linux/random.h>
  21#include <linux/sched.h>
  22#include <linux/exportfs.h>
  23#include <linux/posix_acl.h>
  24
  25MODULE_AUTHOR("Miklos Szeredi <miklos@szeredi.hu>");
  26MODULE_DESCRIPTION("Filesystem in Userspace");
  27MODULE_LICENSE("GPL");
  28
  29static struct kmem_cache *fuse_inode_cachep;
  30struct list_head fuse_conn_list;
  31DEFINE_MUTEX(fuse_mutex);
  32
  33static int set_global_limit(const char *val, struct kernel_param *kp);
  34
  35unsigned max_user_bgreq;
  36module_param_call(max_user_bgreq, set_global_limit, param_get_uint,
  37                  &max_user_bgreq, 0644);
  38__MODULE_PARM_TYPE(max_user_bgreq, "uint");
  39MODULE_PARM_DESC(max_user_bgreq,
  40 "Global limit for the maximum number of backgrounded requests an "
  41 "unprivileged user can set");
  42
  43unsigned max_user_congthresh;
  44module_param_call(max_user_congthresh, set_global_limit, param_get_uint,
  45                  &max_user_congthresh, 0644);
  46__MODULE_PARM_TYPE(max_user_congthresh, "uint");
  47MODULE_PARM_DESC(max_user_congthresh,
  48 "Global limit for the maximum congestion threshold an "
  49 "unprivileged user can set");
  50
  51#define FUSE_SUPER_MAGIC 0x65735546
  52
  53#define FUSE_DEFAULT_BLKSIZE 512
  54
  55/** Maximum number of outstanding background requests */
  56#define FUSE_DEFAULT_MAX_BACKGROUND 12
  57
  58/** Congestion starts at 75% of maximum */
  59#define FUSE_DEFAULT_CONGESTION_THRESHOLD (FUSE_DEFAULT_MAX_BACKGROUND * 3 / 4)
  60
  61struct fuse_mount_data {
  62        int fd;
  63        unsigned rootmode;
  64        kuid_t user_id;
  65        kgid_t group_id;
  66        unsigned fd_present:1;
  67        unsigned rootmode_present:1;
  68        unsigned user_id_present:1;
  69        unsigned group_id_present:1;
  70        unsigned default_permissions:1;
  71        unsigned allow_other:1;
  72        unsigned max_read;
  73        unsigned blksize;
  74};
  75
  76struct fuse_forget_link *fuse_alloc_forget(void)
  77{
  78        return kzalloc(sizeof(struct fuse_forget_link), GFP_KERNEL);
  79}
  80
  81static struct inode *fuse_alloc_inode(struct super_block *sb)
  82{
  83        struct inode *inode;
  84        struct fuse_inode *fi;
  85
  86        inode = kmem_cache_alloc(fuse_inode_cachep, GFP_KERNEL);
  87        if (!inode)
  88                return NULL;
  89
  90        fi = get_fuse_inode(inode);
  91        fi->i_time = 0;
  92        fi->nodeid = 0;
  93        fi->nlookup = 0;
  94        fi->attr_version = 0;
  95        fi->writectr = 0;
  96        fi->orig_ino = 0;
  97        fi->state = 0;
  98        INIT_LIST_HEAD(&fi->write_files);
  99        INIT_LIST_HEAD(&fi->queued_writes);
 100        INIT_LIST_HEAD(&fi->writepages);
 101        init_waitqueue_head(&fi->page_waitq);
 102        mutex_init(&fi->mutex);
 103        fi->forget = fuse_alloc_forget();
 104        if (!fi->forget) {
 105                kmem_cache_free(fuse_inode_cachep, inode);
 106                return NULL;
 107        }
 108
 109        return inode;
 110}
 111
 112static void fuse_i_callback(struct rcu_head *head)
 113{
 114        struct inode *inode = container_of(head, struct inode, i_rcu);
 115        kmem_cache_free(fuse_inode_cachep, inode);
 116}
 117
 118static void fuse_destroy_inode(struct inode *inode)
 119{
 120        struct fuse_inode *fi = get_fuse_inode(inode);
 121        BUG_ON(!list_empty(&fi->write_files));
 122        BUG_ON(!list_empty(&fi->queued_writes));
 123        mutex_destroy(&fi->mutex);
 124        kfree(fi->forget);
 125        call_rcu(&inode->i_rcu, fuse_i_callback);
 126}
 127
 128static void fuse_evict_inode(struct inode *inode)
 129{
 130        truncate_inode_pages_final(&inode->i_data);
 131        clear_inode(inode);
 132        if (inode->i_sb->s_flags & MS_ACTIVE) {
 133                struct fuse_conn *fc = get_fuse_conn(inode);
 134                struct fuse_inode *fi = get_fuse_inode(inode);
 135                fuse_queue_forget(fc, fi->forget, fi->nodeid, fi->nlookup);
 136                fi->forget = NULL;
 137        }
 138}
 139
 140static int fuse_remount_fs(struct super_block *sb, int *flags, char *data)
 141{
 142        sync_filesystem(sb);
 143        if (*flags & MS_MANDLOCK)
 144                return -EINVAL;
 145
 146        return 0;
 147}
 148
 149/*
 150 * ino_t is 32-bits on 32-bit arch. We have to squash the 64-bit value down
 151 * so that it will fit.
 152 */
 153static ino_t fuse_squash_ino(u64 ino64)
 154{
 155        ino_t ino = (ino_t) ino64;
 156        if (sizeof(ino_t) < sizeof(u64))
 157                ino ^= ino64 >> (sizeof(u64) - sizeof(ino_t)) * 8;
 158        return ino;
 159}
 160
 161void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
 162                                   u64 attr_valid)
 163{
 164        struct fuse_conn *fc = get_fuse_conn(inode);
 165        struct fuse_inode *fi = get_fuse_inode(inode);
 166
 167        fi->attr_version = ++fc->attr_version;
 168        fi->i_time = attr_valid;
 169
 170        inode->i_ino     = fuse_squash_ino(attr->ino);
 171        inode->i_mode    = (inode->i_mode & S_IFMT) | (attr->mode & 07777);
 172        set_nlink(inode, attr->nlink);
 173        inode->i_uid     = make_kuid(&init_user_ns, attr->uid);
 174        inode->i_gid     = make_kgid(&init_user_ns, attr->gid);
 175        inode->i_blocks  = attr->blocks;
 176        inode->i_atime.tv_sec   = attr->atime;
 177        inode->i_atime.tv_nsec  = attr->atimensec;
 178        /* mtime from server may be stale due to local buffered write */
 179        if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) {
 180                inode->i_mtime.tv_sec   = attr->mtime;
 181                inode->i_mtime.tv_nsec  = attr->mtimensec;
 182                inode->i_ctime.tv_sec   = attr->ctime;
 183                inode->i_ctime.tv_nsec  = attr->ctimensec;
 184        }
 185
 186        if (attr->blksize != 0)
 187                inode->i_blkbits = ilog2(attr->blksize);
 188        else
 189                inode->i_blkbits = inode->i_sb->s_blocksize_bits;
 190
 191        /*
 192         * Don't set the sticky bit in i_mode, unless we want the VFS
 193         * to check permissions.  This prevents failures due to the
 194         * check in may_delete().
 195         */
 196        fi->orig_i_mode = inode->i_mode;
 197        if (!fc->default_permissions)
 198                inode->i_mode &= ~S_ISVTX;
 199
 200        fi->orig_ino = attr->ino;
 201}
 202
 203void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
 204                            u64 attr_valid, u64 attr_version)
 205{
 206        struct fuse_conn *fc = get_fuse_conn(inode);
 207        struct fuse_inode *fi = get_fuse_inode(inode);
 208        bool is_wb = fc->writeback_cache;
 209        loff_t oldsize;
 210        struct timespec old_mtime;
 211
 212        spin_lock(&fc->lock);
 213        if ((attr_version != 0 && fi->attr_version > attr_version) ||
 214            test_bit(FUSE_I_SIZE_UNSTABLE, &fi->state)) {
 215                spin_unlock(&fc->lock);
 216                return;
 217        }
 218
 219        old_mtime = inode->i_mtime;
 220        fuse_change_attributes_common(inode, attr, attr_valid);
 221
 222        oldsize = inode->i_size;
 223        /*
 224         * In case of writeback_cache enabled, the cached writes beyond EOF
 225         * extend local i_size without keeping userspace server in sync. So,
 226         * attr->size coming from server can be stale. We cannot trust it.
 227         */
 228        if (!is_wb || !S_ISREG(inode->i_mode))
 229                i_size_write(inode, attr->size);
 230        spin_unlock(&fc->lock);
 231
 232        if (!is_wb && S_ISREG(inode->i_mode)) {
 233                bool inval = false;
 234
 235                if (oldsize != attr->size) {
 236                        truncate_pagecache(inode, attr->size);
 237                        inval = true;
 238                } else if (fc->auto_inval_data) {
 239                        struct timespec new_mtime = {
 240                                .tv_sec = attr->mtime,
 241                                .tv_nsec = attr->mtimensec,
 242                        };
 243
 244                        /*
 245                         * Auto inval mode also checks and invalidates if mtime
 246                         * has changed.
 247                         */
 248                        if (!timespec_equal(&old_mtime, &new_mtime))
 249                                inval = true;
 250                }
 251
 252                if (inval)
 253                        invalidate_inode_pages2(inode->i_mapping);
 254        }
 255}
 256
 257static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr)
 258{
 259        inode->i_mode = attr->mode & S_IFMT;
 260        inode->i_size = attr->size;
 261        inode->i_mtime.tv_sec  = attr->mtime;
 262        inode->i_mtime.tv_nsec = attr->mtimensec;
 263        inode->i_ctime.tv_sec  = attr->ctime;
 264        inode->i_ctime.tv_nsec = attr->ctimensec;
 265        if (S_ISREG(inode->i_mode)) {
 266                fuse_init_common(inode);
 267                fuse_init_file_inode(inode);
 268        } else if (S_ISDIR(inode->i_mode))
 269                fuse_init_dir(inode);
 270        else if (S_ISLNK(inode->i_mode))
 271                fuse_init_symlink(inode);
 272        else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
 273                 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
 274                fuse_init_common(inode);
 275                init_special_inode(inode, inode->i_mode,
 276                                   new_decode_dev(attr->rdev));
 277        } else
 278                BUG();
 279}
 280
 281int fuse_inode_eq(struct inode *inode, void *_nodeidp)
 282{
 283        u64 nodeid = *(u64 *) _nodeidp;
 284        if (get_node_id(inode) == nodeid)
 285                return 1;
 286        else
 287                return 0;
 288}
 289
 290static int fuse_inode_set(struct inode *inode, void *_nodeidp)
 291{
 292        u64 nodeid = *(u64 *) _nodeidp;
 293        get_fuse_inode(inode)->nodeid = nodeid;
 294        return 0;
 295}
 296
 297struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
 298                        int generation, struct fuse_attr *attr,
 299                        u64 attr_valid, u64 attr_version)
 300{
 301        struct inode *inode;
 302        struct fuse_inode *fi;
 303        struct fuse_conn *fc = get_fuse_conn_super(sb);
 304
 305 retry:
 306        inode = iget5_locked(sb, nodeid, fuse_inode_eq, fuse_inode_set, &nodeid);
 307        if (!inode)
 308                return NULL;
 309
 310        if ((inode->i_state & I_NEW)) {
 311                inode->i_flags |= S_NOATIME;
 312                if (!fc->writeback_cache || !S_ISREG(attr->mode))
 313                        inode->i_flags |= S_NOCMTIME;
 314                inode->i_generation = generation;
 315                fuse_init_inode(inode, attr);
 316                unlock_new_inode(inode);
 317        } else if ((inode->i_mode ^ attr->mode) & S_IFMT) {
 318                /* Inode has changed type, any I/O on the old should fail */
 319                make_bad_inode(inode);
 320                iput(inode);
 321                goto retry;
 322        }
 323
 324        fi = get_fuse_inode(inode);
 325        spin_lock(&fc->lock);
 326        fi->nlookup++;
 327        spin_unlock(&fc->lock);
 328        fuse_change_attributes(inode, attr, attr_valid, attr_version);
 329
 330        return inode;
 331}
 332
 333int fuse_reverse_inval_inode(struct super_block *sb, u64 nodeid,
 334                             loff_t offset, loff_t len)
 335{
 336        struct inode *inode;
 337        pgoff_t pg_start;
 338        pgoff_t pg_end;
 339
 340        inode = ilookup5(sb, nodeid, fuse_inode_eq, &nodeid);
 341        if (!inode)
 342                return -ENOENT;
 343
 344        fuse_invalidate_attr(inode);
 345        forget_all_cached_acls(inode);
 346        if (offset >= 0) {
 347                pg_start = offset >> PAGE_SHIFT;
 348                if (len <= 0)
 349                        pg_end = -1;
 350                else
 351                        pg_end = (offset + len - 1) >> PAGE_SHIFT;
 352                invalidate_inode_pages2_range(inode->i_mapping,
 353                                              pg_start, pg_end);
 354        }
 355        iput(inode);
 356        return 0;
 357}
 358
 359void fuse_lock_inode(struct inode *inode)
 360{
 361        if (!get_fuse_conn(inode)->parallel_dirops)
 362                mutex_lock(&get_fuse_inode(inode)->mutex);
 363}
 364
 365void fuse_unlock_inode(struct inode *inode)
 366{
 367        if (!get_fuse_conn(inode)->parallel_dirops)
 368                mutex_unlock(&get_fuse_inode(inode)->mutex);
 369}
 370
 371static void fuse_umount_begin(struct super_block *sb)
 372{
 373        fuse_abort_conn(get_fuse_conn_super(sb));
 374}
 375
 376static void fuse_send_destroy(struct fuse_conn *fc)
 377{
 378        struct fuse_req *req = fc->destroy_req;
 379        if (req && fc->conn_init) {
 380                fc->destroy_req = NULL;
 381                req->in.h.opcode = FUSE_DESTROY;
 382                __set_bit(FR_FORCE, &req->flags);
 383                __clear_bit(FR_BACKGROUND, &req->flags);
 384                fuse_request_send(fc, req);
 385                fuse_put_request(fc, req);
 386        }
 387}
 388
 389static void fuse_bdi_destroy(struct fuse_conn *fc)
 390{
 391        if (fc->bdi_initialized)
 392                bdi_destroy(&fc->bdi);
 393}
 394
 395static void fuse_put_super(struct super_block *sb)
 396{
 397        struct fuse_conn *fc = get_fuse_conn_super(sb);
 398
 399        fuse_send_destroy(fc);
 400
 401        fuse_abort_conn(fc);
 402        mutex_lock(&fuse_mutex);
 403        list_del(&fc->entry);
 404        fuse_ctl_remove_conn(fc);
 405        mutex_unlock(&fuse_mutex);
 406        fuse_bdi_destroy(fc);
 407
 408        fuse_conn_put(fc);
 409}
 410
 411static void convert_fuse_statfs(struct kstatfs *stbuf, struct fuse_kstatfs *attr)
 412{
 413        stbuf->f_type    = FUSE_SUPER_MAGIC;
 414        stbuf->f_bsize   = attr->bsize;
 415        stbuf->f_frsize  = attr->frsize;
 416        stbuf->f_blocks  = attr->blocks;
 417        stbuf->f_bfree   = attr->bfree;
 418        stbuf->f_bavail  = attr->bavail;
 419        stbuf->f_files   = attr->files;
 420        stbuf->f_ffree   = attr->ffree;
 421        stbuf->f_namelen = attr->namelen;
 422        /* fsid is left zero */
 423}
 424
 425static int fuse_statfs(struct dentry *dentry, struct kstatfs *buf)
 426{
 427        struct super_block *sb = dentry->d_sb;
 428        struct fuse_conn *fc = get_fuse_conn_super(sb);
 429        FUSE_ARGS(args);
 430        struct fuse_statfs_out outarg;
 431        int err;
 432
 433        if (!fuse_allow_current_process(fc)) {
 434                buf->f_type = FUSE_SUPER_MAGIC;
 435                return 0;
 436        }
 437
 438        memset(&outarg, 0, sizeof(outarg));
 439        args.in.numargs = 0;
 440        args.in.h.opcode = FUSE_STATFS;
 441        args.in.h.nodeid = get_node_id(d_inode(dentry));
 442        args.out.numargs = 1;
 443        args.out.args[0].size = sizeof(outarg);
 444        args.out.args[0].value = &outarg;
 445        err = fuse_simple_request(fc, &args);
 446        if (!err)
 447                convert_fuse_statfs(buf, &outarg.st);
 448        return err;
 449}
 450
 451enum {
 452        OPT_FD,
 453        OPT_ROOTMODE,
 454        OPT_USER_ID,
 455        OPT_GROUP_ID,
 456        OPT_DEFAULT_PERMISSIONS,
 457        OPT_ALLOW_OTHER,
 458        OPT_MAX_READ,
 459        OPT_BLKSIZE,
 460        OPT_ERR
 461};
 462
 463static const match_table_t tokens = {
 464        {OPT_FD,                        "fd=%u"},
 465        {OPT_ROOTMODE,                  "rootmode=%o"},
 466        {OPT_USER_ID,                   "user_id=%u"},
 467        {OPT_GROUP_ID,                  "group_id=%u"},
 468        {OPT_DEFAULT_PERMISSIONS,       "default_permissions"},
 469        {OPT_ALLOW_OTHER,               "allow_other"},
 470        {OPT_MAX_READ,                  "max_read=%u"},
 471        {OPT_BLKSIZE,                   "blksize=%u"},
 472        {OPT_ERR,                       NULL}
 473};
 474
 475static int fuse_match_uint(substring_t *s, unsigned int *res)
 476{
 477        int err = -ENOMEM;
 478        char *buf = match_strdup(s);
 479        if (buf) {
 480                err = kstrtouint(buf, 10, res);
 481                kfree(buf);
 482        }
 483        return err;
 484}
 485
 486static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
 487{
 488        char *p;
 489        memset(d, 0, sizeof(struct fuse_mount_data));
 490        d->max_read = ~0;
 491        d->blksize = FUSE_DEFAULT_BLKSIZE;
 492
 493        while ((p = strsep(&opt, ",")) != NULL) {
 494                int token;
 495                int value;
 496                unsigned uv;
 497                substring_t args[MAX_OPT_ARGS];
 498                if (!*p)
 499                        continue;
 500
 501                token = match_token(p, tokens, args);
 502                switch (token) {
 503                case OPT_FD:
 504                        if (match_int(&args[0], &value))
 505                                return 0;
 506                        d->fd = value;
 507                        d->fd_present = 1;
 508                        break;
 509
 510                case OPT_ROOTMODE:
 511                        if (match_octal(&args[0], &value))
 512                                return 0;
 513                        if (!fuse_valid_type(value))
 514                                return 0;
 515                        d->rootmode = value;
 516                        d->rootmode_present = 1;
 517                        break;
 518
 519                case OPT_USER_ID:
 520                        if (fuse_match_uint(&args[0], &uv))
 521                                return 0;
 522                        d->user_id = make_kuid(current_user_ns(), uv);
 523                        if (!uid_valid(d->user_id))
 524                                return 0;
 525                        d->user_id_present = 1;
 526                        break;
 527
 528                case OPT_GROUP_ID:
 529                        if (fuse_match_uint(&args[0], &uv))
 530                                return 0;
 531                        d->group_id = make_kgid(current_user_ns(), uv);
 532                        if (!gid_valid(d->group_id))
 533                                return 0;
 534                        d->group_id_present = 1;
 535                        break;
 536
 537                case OPT_DEFAULT_PERMISSIONS:
 538                        d->default_permissions = 1;
 539                        break;
 540
 541                case OPT_ALLOW_OTHER:
 542                        d->allow_other = 1;
 543                        break;
 544
 545                case OPT_MAX_READ:
 546                        if (match_int(&args[0], &value))
 547                                return 0;
 548                        d->max_read = value;
 549                        break;
 550
 551                case OPT_BLKSIZE:
 552                        if (!is_bdev || match_int(&args[0], &value))
 553                                return 0;
 554                        d->blksize = value;
 555                        break;
 556
 557                default:
 558                        return 0;
 559                }
 560        }
 561
 562        if (!d->fd_present || !d->rootmode_present ||
 563            !d->user_id_present || !d->group_id_present)
 564                return 0;
 565
 566        return 1;
 567}
 568
 569static int fuse_show_options(struct seq_file *m, struct dentry *root)
 570{
 571        struct super_block *sb = root->d_sb;
 572        struct fuse_conn *fc = get_fuse_conn_super(sb);
 573
 574        seq_printf(m, ",user_id=%u", from_kuid_munged(&init_user_ns, fc->user_id));
 575        seq_printf(m, ",group_id=%u", from_kgid_munged(&init_user_ns, fc->group_id));
 576        if (fc->default_permissions)
 577                seq_puts(m, ",default_permissions");
 578        if (fc->allow_other)
 579                seq_puts(m, ",allow_other");
 580        if (fc->max_read != ~0)
 581                seq_printf(m, ",max_read=%u", fc->max_read);
 582        if (sb->s_bdev && sb->s_blocksize != FUSE_DEFAULT_BLKSIZE)
 583                seq_printf(m, ",blksize=%lu", sb->s_blocksize);
 584        return 0;
 585}
 586
 587static void fuse_iqueue_init(struct fuse_iqueue *fiq)
 588{
 589        memset(fiq, 0, sizeof(struct fuse_iqueue));
 590        init_waitqueue_head(&fiq->waitq);
 591        INIT_LIST_HEAD(&fiq->pending);
 592        INIT_LIST_HEAD(&fiq->interrupts);
 593        fiq->forget_list_tail = &fiq->forget_list_head;
 594        fiq->connected = 1;
 595}
 596
 597static void fuse_pqueue_init(struct fuse_pqueue *fpq)
 598{
 599        memset(fpq, 0, sizeof(struct fuse_pqueue));
 600        spin_lock_init(&fpq->lock);
 601        INIT_LIST_HEAD(&fpq->processing);
 602        INIT_LIST_HEAD(&fpq->io);
 603        fpq->connected = 1;
 604}
 605
 606void fuse_conn_init(struct fuse_conn *fc)
 607{
 608        memset(fc, 0, sizeof(*fc));
 609        spin_lock_init(&fc->lock);
 610        init_rwsem(&fc->killsb);
 611        atomic_set(&fc->count, 1);
 612        atomic_set(&fc->dev_count, 1);
 613        init_waitqueue_head(&fc->blocked_waitq);
 614        init_waitqueue_head(&fc->reserved_req_waitq);
 615        fuse_iqueue_init(&fc->iq);
 616        INIT_LIST_HEAD(&fc->bg_queue);
 617        INIT_LIST_HEAD(&fc->entry);
 618        INIT_LIST_HEAD(&fc->devices);
 619        atomic_set(&fc->num_waiting, 0);
 620        fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND;
 621        fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD;
 622        fc->khctr = 0;
 623        fc->polled_files = RB_ROOT;
 624        fc->blocked = 0;
 625        fc->initialized = 0;
 626        fc->connected = 1;
 627        fc->attr_version = 1;
 628        get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key));
 629}
 630EXPORT_SYMBOL_GPL(fuse_conn_init);
 631
 632void fuse_conn_put(struct fuse_conn *fc)
 633{
 634        if (atomic_dec_and_test(&fc->count)) {
 635                if (fc->destroy_req)
 636                        fuse_request_free(fc->destroy_req);
 637                fc->release(fc);
 638        }
 639}
 640EXPORT_SYMBOL_GPL(fuse_conn_put);
 641
 642struct fuse_conn *fuse_conn_get(struct fuse_conn *fc)
 643{
 644        atomic_inc(&fc->count);
 645        return fc;
 646}
 647EXPORT_SYMBOL_GPL(fuse_conn_get);
 648
 649static struct inode *fuse_get_root_inode(struct super_block *sb, unsigned mode)
 650{
 651        struct fuse_attr attr;
 652        memset(&attr, 0, sizeof(attr));
 653
 654        attr.mode = mode;
 655        attr.ino = FUSE_ROOT_ID;
 656        attr.nlink = 1;
 657        return fuse_iget(sb, 1, 0, &attr, 0, 0);
 658}
 659
 660struct fuse_inode_handle {
 661        u64 nodeid;
 662        u32 generation;
 663};
 664
 665static struct dentry *fuse_get_dentry(struct super_block *sb,
 666                                      struct fuse_inode_handle *handle)
 667{
 668        struct fuse_conn *fc = get_fuse_conn_super(sb);
 669        struct inode *inode;
 670        struct dentry *entry;
 671        int err = -ESTALE;
 672
 673        if (handle->nodeid == 0)
 674                goto out_err;
 675
 676        inode = ilookup5(sb, handle->nodeid, fuse_inode_eq, &handle->nodeid);
 677        if (!inode) {
 678                struct fuse_entry_out outarg;
 679                const struct qstr name = QSTR_INIT(".", 1);
 680
 681                if (!fc->export_support)
 682                        goto out_err;
 683
 684                err = fuse_lookup_name(sb, handle->nodeid, &name, &outarg,
 685                                       &inode);
 686                if (err && err != -ENOENT)
 687                        goto out_err;
 688                if (err || !inode) {
 689                        err = -ESTALE;
 690                        goto out_err;
 691                }
 692                err = -EIO;
 693                if (get_node_id(inode) != handle->nodeid)
 694                        goto out_iput;
 695        }
 696        err = -ESTALE;
 697        if (inode->i_generation != handle->generation)
 698                goto out_iput;
 699
 700        entry = d_obtain_alias(inode);
 701        if (!IS_ERR(entry) && get_node_id(inode) != FUSE_ROOT_ID)
 702                fuse_invalidate_entry_cache(entry);
 703
 704        return entry;
 705
 706 out_iput:
 707        iput(inode);
 708 out_err:
 709        return ERR_PTR(err);
 710}
 711
 712static int fuse_encode_fh(struct inode *inode, u32 *fh, int *max_len,
 713                           struct inode *parent)
 714{
 715        int len = parent ? 6 : 3;
 716        u64 nodeid;
 717        u32 generation;
 718
 719        if (*max_len < len) {
 720                *max_len = len;
 721                return  FILEID_INVALID;
 722        }
 723
 724        nodeid = get_fuse_inode(inode)->nodeid;
 725        generation = inode->i_generation;
 726
 727        fh[0] = (u32)(nodeid >> 32);
 728        fh[1] = (u32)(nodeid & 0xffffffff);
 729        fh[2] = generation;
 730
 731        if (parent) {
 732                nodeid = get_fuse_inode(parent)->nodeid;
 733                generation = parent->i_generation;
 734
 735                fh[3] = (u32)(nodeid >> 32);
 736                fh[4] = (u32)(nodeid & 0xffffffff);
 737                fh[5] = generation;
 738        }
 739
 740        *max_len = len;
 741        return parent ? 0x82 : 0x81;
 742}
 743
 744static struct dentry *fuse_fh_to_dentry(struct super_block *sb,
 745                struct fid *fid, int fh_len, int fh_type)
 746{
 747        struct fuse_inode_handle handle;
 748
 749        if ((fh_type != 0x81 && fh_type != 0x82) || fh_len < 3)
 750                return NULL;
 751
 752        handle.nodeid = (u64) fid->raw[0] << 32;
 753        handle.nodeid |= (u64) fid->raw[1];
 754        handle.generation = fid->raw[2];
 755        return fuse_get_dentry(sb, &handle);
 756}
 757
 758static struct dentry *fuse_fh_to_parent(struct super_block *sb,
 759                struct fid *fid, int fh_len, int fh_type)
 760{
 761        struct fuse_inode_handle parent;
 762
 763        if (fh_type != 0x82 || fh_len < 6)
 764                return NULL;
 765
 766        parent.nodeid = (u64) fid->raw[3] << 32;
 767        parent.nodeid |= (u64) fid->raw[4];
 768        parent.generation = fid->raw[5];
 769        return fuse_get_dentry(sb, &parent);
 770}
 771
 772static struct dentry *fuse_get_parent(struct dentry *child)
 773{
 774        struct inode *child_inode = d_inode(child);
 775        struct fuse_conn *fc = get_fuse_conn(child_inode);
 776        struct inode *inode;
 777        struct dentry *parent;
 778        struct fuse_entry_out outarg;
 779        const struct qstr name = QSTR_INIT("..", 2);
 780        int err;
 781
 782        if (!fc->export_support)
 783                return ERR_PTR(-ESTALE);
 784
 785        err = fuse_lookup_name(child_inode->i_sb, get_node_id(child_inode),
 786                               &name, &outarg, &inode);
 787        if (err) {
 788                if (err == -ENOENT)
 789                        return ERR_PTR(-ESTALE);
 790                return ERR_PTR(err);
 791        }
 792
 793        parent = d_obtain_alias(inode);
 794        if (!IS_ERR(parent) && get_node_id(inode) != FUSE_ROOT_ID)
 795                fuse_invalidate_entry_cache(parent);
 796
 797        return parent;
 798}
 799
 800static const struct export_operations fuse_export_operations = {
 801        .fh_to_dentry   = fuse_fh_to_dentry,
 802        .fh_to_parent   = fuse_fh_to_parent,
 803        .encode_fh      = fuse_encode_fh,
 804        .get_parent     = fuse_get_parent,
 805};
 806
 807static const struct super_operations fuse_super_operations = {
 808        .alloc_inode    = fuse_alloc_inode,
 809        .destroy_inode  = fuse_destroy_inode,
 810        .evict_inode    = fuse_evict_inode,
 811        .write_inode    = fuse_write_inode,
 812        .drop_inode     = generic_delete_inode,
 813        .remount_fs     = fuse_remount_fs,
 814        .put_super      = fuse_put_super,
 815        .umount_begin   = fuse_umount_begin,
 816        .statfs         = fuse_statfs,
 817        .show_options   = fuse_show_options,
 818};
 819
 820static void sanitize_global_limit(unsigned *limit)
 821{
 822        if (*limit == 0)
 823                *limit = ((totalram_pages << PAGE_SHIFT) >> 13) /
 824                         sizeof(struct fuse_req);
 825
 826        if (*limit >= 1 << 16)
 827                *limit = (1 << 16) - 1;
 828}
 829
 830static int set_global_limit(const char *val, struct kernel_param *kp)
 831{
 832        int rv;
 833
 834        rv = param_set_uint(val, kp);
 835        if (rv)
 836                return rv;
 837
 838        sanitize_global_limit((unsigned *)kp->arg);
 839
 840        return 0;
 841}
 842
 843static void process_init_limits(struct fuse_conn *fc, struct fuse_init_out *arg)
 844{
 845        int cap_sys_admin = capable(CAP_SYS_ADMIN);
 846
 847        if (arg->minor < 13)
 848                return;
 849
 850        sanitize_global_limit(&max_user_bgreq);
 851        sanitize_global_limit(&max_user_congthresh);
 852
 853        if (arg->max_background) {
 854                fc->max_background = arg->max_background;
 855
 856                if (!cap_sys_admin && fc->max_background > max_user_bgreq)
 857                        fc->max_background = max_user_bgreq;
 858        }
 859        if (arg->congestion_threshold) {
 860                fc->congestion_threshold = arg->congestion_threshold;
 861
 862                if (!cap_sys_admin &&
 863                    fc->congestion_threshold > max_user_congthresh)
 864                        fc->congestion_threshold = max_user_congthresh;
 865        }
 866}
 867
 868static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
 869{
 870        struct fuse_init_out *arg = &req->misc.init_out;
 871
 872        if (req->out.h.error || arg->major != FUSE_KERNEL_VERSION)
 873                fc->conn_error = 1;
 874        else {
 875                unsigned long ra_pages;
 876
 877                process_init_limits(fc, arg);
 878
 879                if (arg->minor >= 6) {
 880                        ra_pages = arg->max_readahead / PAGE_SIZE;
 881                        if (arg->flags & FUSE_ASYNC_READ)
 882                                fc->async_read = 1;
 883                        if (!(arg->flags & FUSE_POSIX_LOCKS))
 884                                fc->no_lock = 1;
 885                        if (arg->minor >= 17) {
 886                                if (!(arg->flags & FUSE_FLOCK_LOCKS))
 887                                        fc->no_flock = 1;
 888                        } else {
 889                                if (!(arg->flags & FUSE_POSIX_LOCKS))
 890                                        fc->no_flock = 1;
 891                        }
 892                        if (arg->flags & FUSE_ATOMIC_O_TRUNC)
 893                                fc->atomic_o_trunc = 1;
 894                        if (arg->minor >= 9) {
 895                                /* LOOKUP has dependency on proto version */
 896                                if (arg->flags & FUSE_EXPORT_SUPPORT)
 897                                        fc->export_support = 1;
 898                        }
 899                        if (arg->flags & FUSE_BIG_WRITES)
 900                                fc->big_writes = 1;
 901                        if (arg->flags & FUSE_DONT_MASK)
 902                                fc->dont_mask = 1;
 903                        if (arg->flags & FUSE_AUTO_INVAL_DATA)
 904                                fc->auto_inval_data = 1;
 905                        if (arg->flags & FUSE_DO_READDIRPLUS) {
 906                                fc->do_readdirplus = 1;
 907                                if (arg->flags & FUSE_READDIRPLUS_AUTO)
 908                                        fc->readdirplus_auto = 1;
 909                        }
 910                        if (arg->flags & FUSE_ASYNC_DIO)
 911                                fc->async_dio = 1;
 912                        if (arg->flags & FUSE_WRITEBACK_CACHE)
 913                                fc->writeback_cache = 1;
 914                        if (arg->flags & FUSE_PARALLEL_DIROPS)
 915                                fc->parallel_dirops = 1;
 916                        if (arg->flags & FUSE_HANDLE_KILLPRIV)
 917                                fc->handle_killpriv = 1;
 918                        if (arg->time_gran && arg->time_gran <= 1000000000)
 919                                fc->sb->s_time_gran = arg->time_gran;
 920                        if ((arg->flags & FUSE_POSIX_ACL)) {
 921                                fc->default_permissions = 1;
 922                                fc->posix_acl = 1;
 923                                fc->sb->s_xattr = fuse_acl_xattr_handlers;
 924                        }
 925                } else {
 926                        ra_pages = fc->max_read / PAGE_SIZE;
 927                        fc->no_lock = 1;
 928                        fc->no_flock = 1;
 929                }
 930
 931                fc->bdi.ra_pages = min(fc->bdi.ra_pages, ra_pages);
 932                fc->minor = arg->minor;
 933                fc->max_write = arg->minor < 5 ? 4096 : arg->max_write;
 934                fc->max_write = max_t(unsigned, 4096, fc->max_write);
 935                fc->conn_init = 1;
 936        }
 937        fuse_set_initialized(fc);
 938        wake_up_all(&fc->blocked_waitq);
 939}
 940
 941static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req)
 942{
 943        struct fuse_init_in *arg = &req->misc.init_in;
 944
 945        arg->major = FUSE_KERNEL_VERSION;
 946        arg->minor = FUSE_KERNEL_MINOR_VERSION;
 947        arg->max_readahead = fc->bdi.ra_pages * PAGE_SIZE;
 948        arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC |
 949                FUSE_EXPORT_SUPPORT | FUSE_BIG_WRITES | FUSE_DONT_MASK |
 950                FUSE_SPLICE_WRITE | FUSE_SPLICE_MOVE | FUSE_SPLICE_READ |
 951                FUSE_FLOCK_LOCKS | FUSE_HAS_IOCTL_DIR | FUSE_AUTO_INVAL_DATA |
 952                FUSE_DO_READDIRPLUS | FUSE_READDIRPLUS_AUTO | FUSE_ASYNC_DIO |
 953                FUSE_WRITEBACK_CACHE | FUSE_NO_OPEN_SUPPORT |
 954                FUSE_PARALLEL_DIROPS | FUSE_HANDLE_KILLPRIV | FUSE_POSIX_ACL;
 955        req->in.h.opcode = FUSE_INIT;
 956        req->in.numargs = 1;
 957        req->in.args[0].size = sizeof(*arg);
 958        req->in.args[0].value = arg;
 959        req->out.numargs = 1;
 960        /* Variable length argument used for backward compatibility
 961           with interface version < 7.5.  Rest of init_out is zeroed
 962           by do_get_request(), so a short reply is not a problem */
 963        req->out.argvar = 1;
 964        req->out.args[0].size = sizeof(struct fuse_init_out);
 965        req->out.args[0].value = &req->misc.init_out;
 966        req->end = process_init_reply;
 967        fuse_request_send_background(fc, req);
 968}
 969
 970static void fuse_free_conn(struct fuse_conn *fc)
 971{
 972        WARN_ON(!list_empty(&fc->devices));
 973        kfree_rcu(fc, rcu);
 974}
 975
 976static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
 977{
 978        int err;
 979
 980        fc->bdi.name = "fuse";
 981        fc->bdi.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_SIZE;
 982        /* fuse does it's own writeback accounting */
 983        fc->bdi.capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT;
 984
 985        err = bdi_init(&fc->bdi);
 986        if (err)
 987                return err;
 988
 989        fc->bdi_initialized = 1;
 990
 991        if (sb->s_bdev) {
 992                err =  bdi_register(&fc->bdi, NULL, "%u:%u-fuseblk",
 993                                    MAJOR(fc->dev), MINOR(fc->dev));
 994        } else {
 995                err = bdi_register_dev(&fc->bdi, fc->dev);
 996        }
 997
 998        if (err)
 999                return err;
1000
1001        /*
1002         * For a single fuse filesystem use max 1% of dirty +
1003         * writeback threshold.
1004         *
1005         * This gives about 1M of write buffer for memory maps on a
1006         * machine with 1G and 10% dirty_ratio, which should be more
1007         * than enough.
1008         *
1009         * Privileged users can raise it by writing to
1010         *
1011         *    /sys/class/bdi/<bdi>/max_ratio
1012         */
1013        bdi_set_max_ratio(&fc->bdi, 1);
1014
1015        return 0;
1016}
1017
1018struct fuse_dev *fuse_dev_alloc(struct fuse_conn *fc)
1019{
1020        struct fuse_dev *fud;
1021
1022        fud = kzalloc(sizeof(struct fuse_dev), GFP_KERNEL);
1023        if (fud) {
1024                fud->fc = fuse_conn_get(fc);
1025                fuse_pqueue_init(&fud->pq);
1026
1027                spin_lock(&fc->lock);
1028                list_add_tail(&fud->entry, &fc->devices);
1029                spin_unlock(&fc->lock);
1030        }
1031
1032        return fud;
1033}
1034EXPORT_SYMBOL_GPL(fuse_dev_alloc);
1035
1036void fuse_dev_free(struct fuse_dev *fud)
1037{
1038        struct fuse_conn *fc = fud->fc;
1039
1040        if (fc) {
1041                spin_lock(&fc->lock);
1042                list_del(&fud->entry);
1043                spin_unlock(&fc->lock);
1044
1045                fuse_conn_put(fc);
1046        }
1047        kfree(fud);
1048}
1049EXPORT_SYMBOL_GPL(fuse_dev_free);
1050
1051static int fuse_fill_super(struct super_block *sb, void *data, int silent)
1052{
1053        struct fuse_dev *fud;
1054        struct fuse_conn *fc;
1055        struct inode *root;
1056        struct fuse_mount_data d;
1057        struct file *file;
1058        struct dentry *root_dentry;
1059        struct fuse_req *init_req;
1060        int err;
1061        int is_bdev = sb->s_bdev != NULL;
1062
1063        err = -EINVAL;
1064        if (sb->s_flags & MS_MANDLOCK)
1065                goto err;
1066
1067        sb->s_flags &= ~(MS_NOSEC | MS_I_VERSION);
1068
1069        if (!parse_fuse_opt(data, &d, is_bdev))
1070                goto err;
1071
1072        if (is_bdev) {
1073#ifdef CONFIG_BLOCK
1074                err = -EINVAL;
1075                if (!sb_set_blocksize(sb, d.blksize))
1076                        goto err;
1077#endif
1078        } else {
1079                sb->s_blocksize = PAGE_SIZE;
1080                sb->s_blocksize_bits = PAGE_SHIFT;
1081        }
1082        sb->s_magic = FUSE_SUPER_MAGIC;
1083        sb->s_op = &fuse_super_operations;
1084        sb->s_xattr = fuse_xattr_handlers;
1085        sb->s_maxbytes = MAX_LFS_FILESIZE;
1086        sb->s_time_gran = 1;
1087        sb->s_export_op = &fuse_export_operations;
1088
1089        file = fget(d.fd);
1090        err = -EINVAL;
1091        if (!file)
1092                goto err;
1093
1094        if ((file->f_op != &fuse_dev_operations) ||
1095            (file->f_cred->user_ns != &init_user_ns))
1096                goto err_fput;
1097
1098        fc = kmalloc(sizeof(*fc), GFP_KERNEL);
1099        err = -ENOMEM;
1100        if (!fc)
1101                goto err_fput;
1102
1103        fuse_conn_init(fc);
1104        fc->release = fuse_free_conn;
1105
1106        fud = fuse_dev_alloc(fc);
1107        if (!fud)
1108                goto err_put_conn;
1109
1110        fc->dev = sb->s_dev;
1111        fc->sb = sb;
1112        err = fuse_bdi_init(fc, sb);
1113        if (err)
1114                goto err_dev_free;
1115
1116        sb->s_bdi = &fc->bdi;
1117
1118        /* Handle umasking inside the fuse code */
1119        if (sb->s_flags & MS_POSIXACL)
1120                fc->dont_mask = 1;
1121        sb->s_flags |= MS_POSIXACL;
1122
1123        fc->default_permissions = d.default_permissions;
1124        fc->allow_other = d.allow_other;
1125        fc->user_id = d.user_id;
1126        fc->group_id = d.group_id;
1127        fc->max_read = max_t(unsigned, 4096, d.max_read);
1128
1129        /* Used by get_root_inode() */
1130        sb->s_fs_info = fc;
1131
1132        err = -ENOMEM;
1133        root = fuse_get_root_inode(sb, d.rootmode);
1134        sb->s_d_op = &fuse_root_dentry_operations;
1135        root_dentry = d_make_root(root);
1136        if (!root_dentry)
1137                goto err_dev_free;
1138        /* Root dentry doesn't have .d_revalidate */
1139        sb->s_d_op = &fuse_dentry_operations;
1140
1141        init_req = fuse_request_alloc(0);
1142        if (!init_req)
1143                goto err_put_root;
1144        __set_bit(FR_BACKGROUND, &init_req->flags);
1145
1146        if (is_bdev) {
1147                fc->destroy_req = fuse_request_alloc(0);
1148                if (!fc->destroy_req)
1149                        goto err_free_init_req;
1150        }
1151
1152        mutex_lock(&fuse_mutex);
1153        err = -EINVAL;
1154        if (file->private_data)
1155                goto err_unlock;
1156
1157        err = fuse_ctl_add_conn(fc);
1158        if (err)
1159                goto err_unlock;
1160
1161        list_add_tail(&fc->entry, &fuse_conn_list);
1162        sb->s_root = root_dentry;
1163        file->private_data = fud;
1164        mutex_unlock(&fuse_mutex);
1165        /*
1166         * atomic_dec_and_test() in fput() provides the necessary
1167         * memory barrier for file->private_data to be visible on all
1168         * CPUs after this
1169         */
1170        fput(file);
1171
1172        fuse_send_init(fc, init_req);
1173
1174        return 0;
1175
1176 err_unlock:
1177        mutex_unlock(&fuse_mutex);
1178 err_free_init_req:
1179        fuse_request_free(init_req);
1180 err_put_root:
1181        dput(root_dentry);
1182 err_dev_free:
1183        fuse_dev_free(fud);
1184 err_put_conn:
1185        fuse_bdi_destroy(fc);
1186        fuse_conn_put(fc);
1187 err_fput:
1188        fput(file);
1189 err:
1190        return err;
1191}
1192
1193static struct dentry *fuse_mount(struct file_system_type *fs_type,
1194                       int flags, const char *dev_name,
1195                       void *raw_data)
1196{
1197        return mount_nodev(fs_type, flags, raw_data, fuse_fill_super);
1198}
1199
1200static void fuse_kill_sb_anon(struct super_block *sb)
1201{
1202        struct fuse_conn *fc = get_fuse_conn_super(sb);
1203
1204        if (fc) {
1205                down_write(&fc->killsb);
1206                fc->sb = NULL;
1207                up_write(&fc->killsb);
1208        }
1209
1210        kill_anon_super(sb);
1211}
1212
1213static struct file_system_type fuse_fs_type = {
1214        .owner          = THIS_MODULE,
1215        .name           = "fuse",
1216        .fs_flags       = FS_HAS_SUBTYPE,
1217        .mount          = fuse_mount,
1218        .kill_sb        = fuse_kill_sb_anon,
1219};
1220MODULE_ALIAS_FS("fuse");
1221
1222#ifdef CONFIG_BLOCK
1223static struct dentry *fuse_mount_blk(struct file_system_type *fs_type,
1224                           int flags, const char *dev_name,
1225                           void *raw_data)
1226{
1227        return mount_bdev(fs_type, flags, dev_name, raw_data, fuse_fill_super);
1228}
1229
1230static void fuse_kill_sb_blk(struct super_block *sb)
1231{
1232        struct fuse_conn *fc = get_fuse_conn_super(sb);
1233
1234        if (fc) {
1235                down_write(&fc->killsb);
1236                fc->sb = NULL;
1237                up_write(&fc->killsb);
1238        }
1239
1240        kill_block_super(sb);
1241}
1242
1243static struct file_system_type fuseblk_fs_type = {
1244        .owner          = THIS_MODULE,
1245        .name           = "fuseblk",
1246        .mount          = fuse_mount_blk,
1247        .kill_sb        = fuse_kill_sb_blk,
1248        .fs_flags       = FS_REQUIRES_DEV | FS_HAS_SUBTYPE,
1249};
1250MODULE_ALIAS_FS("fuseblk");
1251
1252static inline int register_fuseblk(void)
1253{
1254        return register_filesystem(&fuseblk_fs_type);
1255}
1256
1257static inline void unregister_fuseblk(void)
1258{
1259        unregister_filesystem(&fuseblk_fs_type);
1260}
1261#else
1262static inline int register_fuseblk(void)
1263{
1264        return 0;
1265}
1266
1267static inline void unregister_fuseblk(void)
1268{
1269}
1270#endif
1271
1272static void fuse_inode_init_once(void *foo)
1273{
1274        struct inode *inode = foo;
1275
1276        inode_init_once(inode);
1277}
1278
1279static int __init fuse_fs_init(void)
1280{
1281        int err;
1282
1283        fuse_inode_cachep = kmem_cache_create("fuse_inode",
1284                                              sizeof(struct fuse_inode), 0,
1285                                              SLAB_HWCACHE_ALIGN|SLAB_ACCOUNT,
1286                                              fuse_inode_init_once);
1287        err = -ENOMEM;
1288        if (!fuse_inode_cachep)
1289                goto out;
1290
1291        err = register_fuseblk();
1292        if (err)
1293                goto out2;
1294
1295        err = register_filesystem(&fuse_fs_type);
1296        if (err)
1297                goto out3;
1298
1299        return 0;
1300
1301 out3:
1302        unregister_fuseblk();
1303 out2:
1304        kmem_cache_destroy(fuse_inode_cachep);
1305 out:
1306        return err;
1307}
1308
1309static void fuse_fs_cleanup(void)
1310{
1311        unregister_filesystem(&fuse_fs_type);
1312        unregister_fuseblk();
1313
1314        /*
1315         * Make sure all delayed rcu free inodes are flushed before we
1316         * destroy cache.
1317         */
1318        rcu_barrier();
1319        kmem_cache_destroy(fuse_inode_cachep);
1320}
1321
1322static struct kobject *fuse_kobj;
1323
1324static int fuse_sysfs_init(void)
1325{
1326        int err;
1327
1328        fuse_kobj = kobject_create_and_add("fuse", fs_kobj);
1329        if (!fuse_kobj) {
1330                err = -ENOMEM;
1331                goto out_err;
1332        }
1333
1334        err = sysfs_create_mount_point(fuse_kobj, "connections");
1335        if (err)
1336                goto out_fuse_unregister;
1337
1338        return 0;
1339
1340 out_fuse_unregister:
1341        kobject_put(fuse_kobj);
1342 out_err:
1343        return err;
1344}
1345
1346static void fuse_sysfs_cleanup(void)
1347{
1348        sysfs_remove_mount_point(fuse_kobj, "connections");
1349        kobject_put(fuse_kobj);
1350}
1351
1352static int __init fuse_init(void)
1353{
1354        int res;
1355
1356        printk(KERN_INFO "fuse init (API version %i.%i)\n",
1357               FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
1358
1359        INIT_LIST_HEAD(&fuse_conn_list);
1360        res = fuse_fs_init();
1361        if (res)
1362                goto err;
1363
1364        res = fuse_dev_init();
1365        if (res)
1366                goto err_fs_cleanup;
1367
1368        res = fuse_sysfs_init();
1369        if (res)
1370                goto err_dev_cleanup;
1371
1372        res = fuse_ctl_init();
1373        if (res)
1374                goto err_sysfs_cleanup;
1375
1376        sanitize_global_limit(&max_user_bgreq);
1377        sanitize_global_limit(&max_user_congthresh);
1378
1379        return 0;
1380
1381 err_sysfs_cleanup:
1382        fuse_sysfs_cleanup();
1383 err_dev_cleanup:
1384        fuse_dev_cleanup();
1385 err_fs_cleanup:
1386        fuse_fs_cleanup();
1387 err:
1388        return res;
1389}
1390
1391static void __exit fuse_exit(void)
1392{
1393        printk(KERN_DEBUG "fuse exit\n");
1394
1395        fuse_ctl_cleanup();
1396        fuse_sysfs_cleanup();
1397        fuse_fs_cleanup();
1398        fuse_dev_cleanup();
1399}
1400
1401module_init(fuse_init);
1402module_exit(fuse_exit);
1403