linux/fs/fuse/dir.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/file.h>
  13#include <linux/sched.h>
  14#include <linux/namei.h>
  15#include <linux/slab.h>
  16#include <linux/xattr.h>
  17#include <linux/posix_acl.h>
  18
  19static bool fuse_use_readdirplus(struct inode *dir, struct dir_context *ctx)
  20{
  21        struct fuse_conn *fc = get_fuse_conn(dir);
  22        struct fuse_inode *fi = get_fuse_inode(dir);
  23
  24        if (!fc->do_readdirplus)
  25                return false;
  26        if (!fc->readdirplus_auto)
  27                return true;
  28        if (test_and_clear_bit(FUSE_I_ADVISE_RDPLUS, &fi->state))
  29                return true;
  30        if (ctx->pos == 0)
  31                return true;
  32        return false;
  33}
  34
  35static void fuse_advise_use_readdirplus(struct inode *dir)
  36{
  37        struct fuse_inode *fi = get_fuse_inode(dir);
  38
  39        set_bit(FUSE_I_ADVISE_RDPLUS, &fi->state);
  40}
  41
  42union fuse_dentry {
  43        u64 time;
  44        struct rcu_head rcu;
  45};
  46
  47static inline void fuse_dentry_settime(struct dentry *entry, u64 time)
  48{
  49        ((union fuse_dentry *) entry->d_fsdata)->time = time;
  50}
  51
  52static inline u64 fuse_dentry_time(struct dentry *entry)
  53{
  54        return ((union fuse_dentry *) entry->d_fsdata)->time;
  55}
  56
  57/*
  58 * FUSE caches dentries and attributes with separate timeout.  The
  59 * time in jiffies until the dentry/attributes are valid is stored in
  60 * dentry->d_fsdata and fuse_inode->i_time respectively.
  61 */
  62
  63/*
  64 * Calculate the time in jiffies until a dentry/attributes are valid
  65 */
  66static u64 time_to_jiffies(u64 sec, u32 nsec)
  67{
  68        if (sec || nsec) {
  69                struct timespec64 ts = {
  70                        sec,
  71                        min_t(u32, nsec, NSEC_PER_SEC - 1)
  72                };
  73
  74                return get_jiffies_64() + timespec64_to_jiffies(&ts);
  75        } else
  76                return 0;
  77}
  78
  79/*
  80 * Set dentry and possibly attribute timeouts from the lookup/mk*
  81 * replies
  82 */
  83static void fuse_change_entry_timeout(struct dentry *entry,
  84                                      struct fuse_entry_out *o)
  85{
  86        fuse_dentry_settime(entry,
  87                time_to_jiffies(o->entry_valid, o->entry_valid_nsec));
  88}
  89
  90static u64 attr_timeout(struct fuse_attr_out *o)
  91{
  92        return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
  93}
  94
  95static u64 entry_attr_timeout(struct fuse_entry_out *o)
  96{
  97        return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
  98}
  99
 100/*
 101 * Mark the attributes as stale, so that at the next call to
 102 * ->getattr() they will be fetched from userspace
 103 */
 104void fuse_invalidate_attr(struct inode *inode)
 105{
 106        get_fuse_inode(inode)->i_time = 0;
 107}
 108
 109/**
 110 * Mark the attributes as stale due to an atime change.  Avoid the invalidate if
 111 * atime is not used.
 112 */
 113void fuse_invalidate_atime(struct inode *inode)
 114{
 115        if (!IS_RDONLY(inode))
 116                fuse_invalidate_attr(inode);
 117}
 118
 119/*
 120 * Just mark the entry as stale, so that a next attempt to look it up
 121 * will result in a new lookup call to userspace
 122 *
 123 * This is called when a dentry is about to become negative and the
 124 * timeout is unknown (unlink, rmdir, rename and in some cases
 125 * lookup)
 126 */
 127void fuse_invalidate_entry_cache(struct dentry *entry)
 128{
 129        fuse_dentry_settime(entry, 0);
 130}
 131
 132/*
 133 * Same as fuse_invalidate_entry_cache(), but also try to remove the
 134 * dentry from the hash
 135 */
 136static void fuse_invalidate_entry(struct dentry *entry)
 137{
 138        d_invalidate(entry);
 139        fuse_invalidate_entry_cache(entry);
 140}
 141
 142static void fuse_lookup_init(struct fuse_conn *fc, struct fuse_args *args,
 143                             u64 nodeid, const struct qstr *name,
 144                             struct fuse_entry_out *outarg)
 145{
 146        memset(outarg, 0, sizeof(struct fuse_entry_out));
 147        args->in.h.opcode = FUSE_LOOKUP;
 148        args->in.h.nodeid = nodeid;
 149        args->in.numargs = 1;
 150        args->in.args[0].size = name->len + 1;
 151        args->in.args[0].value = name->name;
 152        args->out.numargs = 1;
 153        args->out.args[0].size = sizeof(struct fuse_entry_out);
 154        args->out.args[0].value = outarg;
 155}
 156
 157u64 fuse_get_attr_version(struct fuse_conn *fc)
 158{
 159        u64 curr_version;
 160
 161        /*
 162         * The spin lock isn't actually needed on 64bit archs, but we
 163         * don't yet care too much about such optimizations.
 164         */
 165        spin_lock(&fc->lock);
 166        curr_version = fc->attr_version;
 167        spin_unlock(&fc->lock);
 168
 169        return curr_version;
 170}
 171
 172/*
 173 * Check whether the dentry is still valid
 174 *
 175 * If the entry validity timeout has expired and the dentry is
 176 * positive, try to redo the lookup.  If the lookup results in a
 177 * different inode, then let the VFS invalidate the dentry and redo
 178 * the lookup once more.  If the lookup results in the same inode,
 179 * then refresh the attributes, timeouts and mark the dentry valid.
 180 */
 181static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)
 182{
 183        struct inode *inode;
 184        struct dentry *parent;
 185        struct fuse_conn *fc;
 186        struct fuse_inode *fi;
 187        int ret;
 188
 189        inode = d_inode_rcu(entry);
 190        if (inode && is_bad_inode(inode))
 191                goto invalid;
 192        else if (time_before64(fuse_dentry_time(entry), get_jiffies_64()) ||
 193                 (flags & LOOKUP_REVAL)) {
 194                struct fuse_entry_out outarg;
 195                FUSE_ARGS(args);
 196                struct fuse_forget_link *forget;
 197                u64 attr_version;
 198
 199                /* For negative dentries, always do a fresh lookup */
 200                if (!inode)
 201                        goto invalid;
 202
 203                ret = -ECHILD;
 204                if (flags & LOOKUP_RCU)
 205                        goto out;
 206
 207                fc = get_fuse_conn(inode);
 208
 209                forget = fuse_alloc_forget();
 210                ret = -ENOMEM;
 211                if (!forget)
 212                        goto out;
 213
 214                attr_version = fuse_get_attr_version(fc);
 215
 216                parent = dget_parent(entry);
 217                fuse_lookup_init(fc, &args, get_node_id(d_inode(parent)),
 218                                 &entry->d_name, &outarg);
 219                ret = fuse_simple_request(fc, &args);
 220                dput(parent);
 221                /* Zero nodeid is same as -ENOENT */
 222                if (!ret && !outarg.nodeid)
 223                        ret = -ENOENT;
 224                if (!ret) {
 225                        fi = get_fuse_inode(inode);
 226                        if (outarg.nodeid != get_node_id(inode)) {
 227                                fuse_queue_forget(fc, forget, outarg.nodeid, 1);
 228                                goto invalid;
 229                        }
 230                        spin_lock(&fc->lock);
 231                        fi->nlookup++;
 232                        spin_unlock(&fc->lock);
 233                }
 234                kfree(forget);
 235                if (ret == -ENOMEM)
 236                        goto out;
 237                if (ret || (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
 238                        goto invalid;
 239
 240                forget_all_cached_acls(inode);
 241                fuse_change_attributes(inode, &outarg.attr,
 242                                       entry_attr_timeout(&outarg),
 243                                       attr_version);
 244                fuse_change_entry_timeout(entry, &outarg);
 245        } else if (inode) {
 246                fi = get_fuse_inode(inode);
 247                if (flags & LOOKUP_RCU) {
 248                        if (test_bit(FUSE_I_INIT_RDPLUS, &fi->state))
 249                                return -ECHILD;
 250                } else if (test_and_clear_bit(FUSE_I_INIT_RDPLUS, &fi->state)) {
 251                        parent = dget_parent(entry);
 252                        fuse_advise_use_readdirplus(d_inode(parent));
 253                        dput(parent);
 254                }
 255        }
 256        ret = 1;
 257out:
 258        return ret;
 259
 260invalid:
 261        ret = 0;
 262        goto out;
 263}
 264
 265static int invalid_nodeid(u64 nodeid)
 266{
 267        return !nodeid || nodeid == FUSE_ROOT_ID;
 268}
 269
 270static int fuse_dentry_init(struct dentry *dentry)
 271{
 272        dentry->d_fsdata = kzalloc(sizeof(union fuse_dentry), GFP_KERNEL);
 273
 274        return dentry->d_fsdata ? 0 : -ENOMEM;
 275}
 276static void fuse_dentry_release(struct dentry *dentry)
 277{
 278        union fuse_dentry *fd = dentry->d_fsdata;
 279
 280        kfree_rcu(fd, rcu);
 281}
 282
 283const struct dentry_operations fuse_dentry_operations = {
 284        .d_revalidate   = fuse_dentry_revalidate,
 285        .d_init         = fuse_dentry_init,
 286        .d_release      = fuse_dentry_release,
 287};
 288
 289const struct dentry_operations fuse_root_dentry_operations = {
 290        .d_init         = fuse_dentry_init,
 291        .d_release      = fuse_dentry_release,
 292};
 293
 294int fuse_valid_type(int m)
 295{
 296        return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) ||
 297                S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
 298}
 299
 300int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name,
 301                     struct fuse_entry_out *outarg, struct inode **inode)
 302{
 303        struct fuse_conn *fc = get_fuse_conn_super(sb);
 304        FUSE_ARGS(args);
 305        struct fuse_forget_link *forget;
 306        u64 attr_version;
 307        int err;
 308
 309        *inode = NULL;
 310        err = -ENAMETOOLONG;
 311        if (name->len > FUSE_NAME_MAX)
 312                goto out;
 313
 314
 315        forget = fuse_alloc_forget();
 316        err = -ENOMEM;
 317        if (!forget)
 318                goto out;
 319
 320        attr_version = fuse_get_attr_version(fc);
 321
 322        fuse_lookup_init(fc, &args, nodeid, name, outarg);
 323        err = fuse_simple_request(fc, &args);
 324        /* Zero nodeid is same as -ENOENT, but with valid timeout */
 325        if (err || !outarg->nodeid)
 326                goto out_put_forget;
 327
 328        err = -EIO;
 329        if (!outarg->nodeid)
 330                goto out_put_forget;
 331        if (!fuse_valid_type(outarg->attr.mode))
 332                goto out_put_forget;
 333
 334        *inode = fuse_iget(sb, outarg->nodeid, outarg->generation,
 335                           &outarg->attr, entry_attr_timeout(outarg),
 336                           attr_version);
 337        err = -ENOMEM;
 338        if (!*inode) {
 339                fuse_queue_forget(fc, forget, outarg->nodeid, 1);
 340                goto out;
 341        }
 342        err = 0;
 343
 344 out_put_forget:
 345        kfree(forget);
 346 out:
 347        return err;
 348}
 349
 350static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
 351                                  unsigned int flags)
 352{
 353        int err;
 354        struct fuse_entry_out outarg;
 355        struct inode *inode;
 356        struct dentry *newent;
 357        bool outarg_valid = true;
 358
 359        fuse_lock_inode(dir);
 360        err = fuse_lookup_name(dir->i_sb, get_node_id(dir), &entry->d_name,
 361                               &outarg, &inode);
 362        fuse_unlock_inode(dir);
 363        if (err == -ENOENT) {
 364                outarg_valid = false;
 365                err = 0;
 366        }
 367        if (err)
 368                goto out_err;
 369
 370        err = -EIO;
 371        if (inode && get_node_id(inode) == FUSE_ROOT_ID)
 372                goto out_iput;
 373
 374        newent = d_splice_alias(inode, entry);
 375        err = PTR_ERR(newent);
 376        if (IS_ERR(newent))
 377                goto out_err;
 378
 379        entry = newent ? newent : entry;
 380        if (outarg_valid)
 381                fuse_change_entry_timeout(entry, &outarg);
 382        else
 383                fuse_invalidate_entry_cache(entry);
 384
 385        fuse_advise_use_readdirplus(dir);
 386        return newent;
 387
 388 out_iput:
 389        iput(inode);
 390 out_err:
 391        return ERR_PTR(err);
 392}
 393
 394/*
 395 * Atomic create+open operation
 396 *
 397 * If the filesystem doesn't support this, then fall back to separate
 398 * 'mknod' + 'open' requests.
 399 */
 400static int fuse_create_open(struct inode *dir, struct dentry *entry,
 401                            struct file *file, unsigned flags,
 402                            umode_t mode, int *opened)
 403{
 404        int err;
 405        struct inode *inode;
 406        struct fuse_conn *fc = get_fuse_conn(dir);
 407        FUSE_ARGS(args);
 408        struct fuse_forget_link *forget;
 409        struct fuse_create_in inarg;
 410        struct fuse_open_out outopen;
 411        struct fuse_entry_out outentry;
 412        struct fuse_file *ff;
 413
 414        /* Userspace expects S_IFREG in create mode */
 415        BUG_ON((mode & S_IFMT) != S_IFREG);
 416
 417        forget = fuse_alloc_forget();
 418        err = -ENOMEM;
 419        if (!forget)
 420                goto out_err;
 421
 422        err = -ENOMEM;
 423        ff = fuse_file_alloc(fc);
 424        if (!ff)
 425                goto out_put_forget_req;
 426
 427        if (!fc->dont_mask)
 428                mode &= ~current_umask();
 429
 430        flags &= ~O_NOCTTY;
 431        memset(&inarg, 0, sizeof(inarg));
 432        memset(&outentry, 0, sizeof(outentry));
 433        inarg.flags = flags;
 434        inarg.mode = mode;
 435        inarg.umask = current_umask();
 436        args.in.h.opcode = FUSE_CREATE;
 437        args.in.h.nodeid = get_node_id(dir);
 438        args.in.numargs = 2;
 439        args.in.args[0].size = sizeof(inarg);
 440        args.in.args[0].value = &inarg;
 441        args.in.args[1].size = entry->d_name.len + 1;
 442        args.in.args[1].value = entry->d_name.name;
 443        args.out.numargs = 2;
 444        args.out.args[0].size = sizeof(outentry);
 445        args.out.args[0].value = &outentry;
 446        args.out.args[1].size = sizeof(outopen);
 447        args.out.args[1].value = &outopen;
 448        err = fuse_simple_request(fc, &args);
 449        if (err)
 450                goto out_free_ff;
 451
 452        err = -EIO;
 453        if (!S_ISREG(outentry.attr.mode) || invalid_nodeid(outentry.nodeid))
 454                goto out_free_ff;
 455
 456        ff->fh = outopen.fh;
 457        ff->nodeid = outentry.nodeid;
 458        ff->open_flags = outopen.open_flags;
 459        inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation,
 460                          &outentry.attr, entry_attr_timeout(&outentry), 0);
 461        if (!inode) {
 462                flags &= ~(O_CREAT | O_EXCL | O_TRUNC);
 463                fuse_sync_release(ff, flags);
 464                fuse_queue_forget(fc, forget, outentry.nodeid, 1);
 465                err = -ENOMEM;
 466                goto out_err;
 467        }
 468        kfree(forget);
 469        d_instantiate(entry, inode);
 470        fuse_change_entry_timeout(entry, &outentry);
 471        fuse_invalidate_attr(dir);
 472        err = finish_open(file, entry, generic_file_open, opened);
 473        if (err) {
 474                fuse_sync_release(ff, flags);
 475        } else {
 476                file->private_data = ff;
 477                fuse_finish_open(inode, file);
 478        }
 479        return err;
 480
 481out_free_ff:
 482        fuse_file_free(ff);
 483out_put_forget_req:
 484        kfree(forget);
 485out_err:
 486        return err;
 487}
 488
 489static int fuse_mknod(struct inode *, struct dentry *, umode_t, dev_t);
 490static int fuse_atomic_open(struct inode *dir, struct dentry *entry,
 491                            struct file *file, unsigned flags,
 492                            umode_t mode, int *opened)
 493{
 494        int err;
 495        struct fuse_conn *fc = get_fuse_conn(dir);
 496        struct dentry *res = NULL;
 497
 498        if (d_in_lookup(entry)) {
 499                res = fuse_lookup(dir, entry, 0);
 500                if (IS_ERR(res))
 501                        return PTR_ERR(res);
 502
 503                if (res)
 504                        entry = res;
 505        }
 506
 507        if (!(flags & O_CREAT) || d_really_is_positive(entry))
 508                goto no_open;
 509
 510        /* Only creates */
 511        *opened |= FILE_CREATED;
 512
 513        if (fc->no_create)
 514                goto mknod;
 515
 516        err = fuse_create_open(dir, entry, file, flags, mode, opened);
 517        if (err == -ENOSYS) {
 518                fc->no_create = 1;
 519                goto mknod;
 520        }
 521out_dput:
 522        dput(res);
 523        return err;
 524
 525mknod:
 526        err = fuse_mknod(dir, entry, mode, 0);
 527        if (err)
 528                goto out_dput;
 529no_open:
 530        return finish_no_open(file, res);
 531}
 532
 533/*
 534 * Code shared between mknod, mkdir, symlink and link
 535 */
 536static int create_new_entry(struct fuse_conn *fc, struct fuse_args *args,
 537                            struct inode *dir, struct dentry *entry,
 538                            umode_t mode)
 539{
 540        struct fuse_entry_out outarg;
 541        struct inode *inode;
 542        int err;
 543        struct fuse_forget_link *forget;
 544
 545        forget = fuse_alloc_forget();
 546        if (!forget)
 547                return -ENOMEM;
 548
 549        memset(&outarg, 0, sizeof(outarg));
 550        args->in.h.nodeid = get_node_id(dir);
 551        args->out.numargs = 1;
 552        args->out.args[0].size = sizeof(outarg);
 553        args->out.args[0].value = &outarg;
 554        err = fuse_simple_request(fc, args);
 555        if (err)
 556                goto out_put_forget_req;
 557
 558        err = -EIO;
 559        if (invalid_nodeid(outarg.nodeid))
 560                goto out_put_forget_req;
 561
 562        if ((outarg.attr.mode ^ mode) & S_IFMT)
 563                goto out_put_forget_req;
 564
 565        inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
 566                          &outarg.attr, entry_attr_timeout(&outarg), 0);
 567        if (!inode) {
 568                fuse_queue_forget(fc, forget, outarg.nodeid, 1);
 569                return -ENOMEM;
 570        }
 571        kfree(forget);
 572
 573        err = d_instantiate_no_diralias(entry, inode);
 574        if (err)
 575                return err;
 576
 577        fuse_change_entry_timeout(entry, &outarg);
 578        fuse_invalidate_attr(dir);
 579        return 0;
 580
 581 out_put_forget_req:
 582        kfree(forget);
 583        return err;
 584}
 585
 586static int fuse_mknod(struct inode *dir, struct dentry *entry, umode_t mode,
 587                      dev_t rdev)
 588{
 589        struct fuse_mknod_in inarg;
 590        struct fuse_conn *fc = get_fuse_conn(dir);
 591        FUSE_ARGS(args);
 592
 593        if (!fc->dont_mask)
 594                mode &= ~current_umask();
 595
 596        memset(&inarg, 0, sizeof(inarg));
 597        inarg.mode = mode;
 598        inarg.rdev = new_encode_dev(rdev);
 599        inarg.umask = current_umask();
 600        args.in.h.opcode = FUSE_MKNOD;
 601        args.in.numargs = 2;
 602        args.in.args[0].size = sizeof(inarg);
 603        args.in.args[0].value = &inarg;
 604        args.in.args[1].size = entry->d_name.len + 1;
 605        args.in.args[1].value = entry->d_name.name;
 606        return create_new_entry(fc, &args, dir, entry, mode);
 607}
 608
 609static int fuse_create(struct inode *dir, struct dentry *entry, umode_t mode,
 610                       bool excl)
 611{
 612        return fuse_mknod(dir, entry, mode, 0);
 613}
 614
 615static int fuse_mkdir(struct inode *dir, struct dentry *entry, umode_t mode)
 616{
 617        struct fuse_mkdir_in inarg;
 618        struct fuse_conn *fc = get_fuse_conn(dir);
 619        FUSE_ARGS(args);
 620
 621        if (!fc->dont_mask)
 622                mode &= ~current_umask();
 623
 624        memset(&inarg, 0, sizeof(inarg));
 625        inarg.mode = mode;
 626        inarg.umask = current_umask();
 627        args.in.h.opcode = FUSE_MKDIR;
 628        args.in.numargs = 2;
 629        args.in.args[0].size = sizeof(inarg);
 630        args.in.args[0].value = &inarg;
 631        args.in.args[1].size = entry->d_name.len + 1;
 632        args.in.args[1].value = entry->d_name.name;
 633        return create_new_entry(fc, &args, dir, entry, S_IFDIR);
 634}
 635
 636static int fuse_symlink(struct inode *dir, struct dentry *entry,
 637                        const char *link)
 638{
 639        struct fuse_conn *fc = get_fuse_conn(dir);
 640        unsigned len = strlen(link) + 1;
 641        FUSE_ARGS(args);
 642
 643        args.in.h.opcode = FUSE_SYMLINK;
 644        args.in.numargs = 2;
 645        args.in.args[0].size = entry->d_name.len + 1;
 646        args.in.args[0].value = entry->d_name.name;
 647        args.in.args[1].size = len;
 648        args.in.args[1].value = link;
 649        return create_new_entry(fc, &args, dir, entry, S_IFLNK);
 650}
 651
 652void fuse_update_ctime(struct inode *inode)
 653{
 654        if (!IS_NOCMTIME(inode)) {
 655                inode->i_ctime = current_time(inode);
 656                mark_inode_dirty_sync(inode);
 657        }
 658}
 659
 660static int fuse_unlink(struct inode *dir, struct dentry *entry)
 661{
 662        int err;
 663        struct fuse_conn *fc = get_fuse_conn(dir);
 664        FUSE_ARGS(args);
 665
 666        args.in.h.opcode = FUSE_UNLINK;
 667        args.in.h.nodeid = get_node_id(dir);
 668        args.in.numargs = 1;
 669        args.in.args[0].size = entry->d_name.len + 1;
 670        args.in.args[0].value = entry->d_name.name;
 671        err = fuse_simple_request(fc, &args);
 672        if (!err) {
 673                struct inode *inode = d_inode(entry);
 674                struct fuse_inode *fi = get_fuse_inode(inode);
 675
 676                spin_lock(&fc->lock);
 677                fi->attr_version = ++fc->attr_version;
 678                /*
 679                 * If i_nlink == 0 then unlink doesn't make sense, yet this can
 680                 * happen if userspace filesystem is careless.  It would be
 681                 * difficult to enforce correct nlink usage so just ignore this
 682                 * condition here
 683                 */
 684                if (inode->i_nlink > 0)
 685                        drop_nlink(inode);
 686                spin_unlock(&fc->lock);
 687                fuse_invalidate_attr(inode);
 688                fuse_invalidate_attr(dir);
 689                fuse_invalidate_entry_cache(entry);
 690                fuse_update_ctime(inode);
 691        } else if (err == -EINTR)
 692                fuse_invalidate_entry(entry);
 693        return err;
 694}
 695
 696static int fuse_rmdir(struct inode *dir, struct dentry *entry)
 697{
 698        int err;
 699        struct fuse_conn *fc = get_fuse_conn(dir);
 700        FUSE_ARGS(args);
 701
 702        args.in.h.opcode = FUSE_RMDIR;
 703        args.in.h.nodeid = get_node_id(dir);
 704        args.in.numargs = 1;
 705        args.in.args[0].size = entry->d_name.len + 1;
 706        args.in.args[0].value = entry->d_name.name;
 707        err = fuse_simple_request(fc, &args);
 708        if (!err) {
 709                clear_nlink(d_inode(entry));
 710                fuse_invalidate_attr(dir);
 711                fuse_invalidate_entry_cache(entry);
 712        } else if (err == -EINTR)
 713                fuse_invalidate_entry(entry);
 714        return err;
 715}
 716
 717static int fuse_rename_common(struct inode *olddir, struct dentry *oldent,
 718                              struct inode *newdir, struct dentry *newent,
 719                              unsigned int flags, int opcode, size_t argsize)
 720{
 721        int err;
 722        struct fuse_rename2_in inarg;
 723        struct fuse_conn *fc = get_fuse_conn(olddir);
 724        FUSE_ARGS(args);
 725
 726        memset(&inarg, 0, argsize);
 727        inarg.newdir = get_node_id(newdir);
 728        inarg.flags = flags;
 729        args.in.h.opcode = opcode;
 730        args.in.h.nodeid = get_node_id(olddir);
 731        args.in.numargs = 3;
 732        args.in.args[0].size = argsize;
 733        args.in.args[0].value = &inarg;
 734        args.in.args[1].size = oldent->d_name.len + 1;
 735        args.in.args[1].value = oldent->d_name.name;
 736        args.in.args[2].size = newent->d_name.len + 1;
 737        args.in.args[2].value = newent->d_name.name;
 738        err = fuse_simple_request(fc, &args);
 739        if (!err) {
 740                /* ctime changes */
 741                fuse_invalidate_attr(d_inode(oldent));
 742                fuse_update_ctime(d_inode(oldent));
 743
 744                if (flags & RENAME_EXCHANGE) {
 745                        fuse_invalidate_attr(d_inode(newent));
 746                        fuse_update_ctime(d_inode(newent));
 747                }
 748
 749                fuse_invalidate_attr(olddir);
 750                if (olddir != newdir)
 751                        fuse_invalidate_attr(newdir);
 752
 753                /* newent will end up negative */
 754                if (!(flags & RENAME_EXCHANGE) && d_really_is_positive(newent)) {
 755                        fuse_invalidate_attr(d_inode(newent));
 756                        fuse_invalidate_entry_cache(newent);
 757                        fuse_update_ctime(d_inode(newent));
 758                }
 759        } else if (err == -EINTR) {
 760                /* If request was interrupted, DEITY only knows if the
 761                   rename actually took place.  If the invalidation
 762                   fails (e.g. some process has CWD under the renamed
 763                   directory), then there can be inconsistency between
 764                   the dcache and the real filesystem.  Tough luck. */
 765                fuse_invalidate_entry(oldent);
 766                if (d_really_is_positive(newent))
 767                        fuse_invalidate_entry(newent);
 768        }
 769
 770        return err;
 771}
 772
 773static int fuse_rename2(struct inode *olddir, struct dentry *oldent,
 774                        struct inode *newdir, struct dentry *newent,
 775                        unsigned int flags)
 776{
 777        struct fuse_conn *fc = get_fuse_conn(olddir);
 778        int err;
 779
 780        if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE))
 781                return -EINVAL;
 782
 783        if (flags) {
 784                if (fc->no_rename2 || fc->minor < 23)
 785                        return -EINVAL;
 786
 787                err = fuse_rename_common(olddir, oldent, newdir, newent, flags,
 788                                         FUSE_RENAME2,
 789                                         sizeof(struct fuse_rename2_in));
 790                if (err == -ENOSYS) {
 791                        fc->no_rename2 = 1;
 792                        err = -EINVAL;
 793                }
 794        } else {
 795                err = fuse_rename_common(olddir, oldent, newdir, newent, 0,
 796                                         FUSE_RENAME,
 797                                         sizeof(struct fuse_rename_in));
 798        }
 799
 800        return err;
 801}
 802
 803static int fuse_link(struct dentry *entry, struct inode *newdir,
 804                     struct dentry *newent)
 805{
 806        int err;
 807        struct fuse_link_in inarg;
 808        struct inode *inode = d_inode(entry);
 809        struct fuse_conn *fc = get_fuse_conn(inode);
 810        FUSE_ARGS(args);
 811
 812        memset(&inarg, 0, sizeof(inarg));
 813        inarg.oldnodeid = get_node_id(inode);
 814        args.in.h.opcode = FUSE_LINK;
 815        args.in.numargs = 2;
 816        args.in.args[0].size = sizeof(inarg);
 817        args.in.args[0].value = &inarg;
 818        args.in.args[1].size = newent->d_name.len + 1;
 819        args.in.args[1].value = newent->d_name.name;
 820        err = create_new_entry(fc, &args, newdir, newent, inode->i_mode);
 821        /* Contrary to "normal" filesystems it can happen that link
 822           makes two "logical" inodes point to the same "physical"
 823           inode.  We invalidate the attributes of the old one, so it
 824           will reflect changes in the backing inode (link count,
 825           etc.)
 826        */
 827        if (!err) {
 828                struct fuse_inode *fi = get_fuse_inode(inode);
 829
 830                spin_lock(&fc->lock);
 831                fi->attr_version = ++fc->attr_version;
 832                inc_nlink(inode);
 833                spin_unlock(&fc->lock);
 834                fuse_invalidate_attr(inode);
 835                fuse_update_ctime(inode);
 836        } else if (err == -EINTR) {
 837                fuse_invalidate_attr(inode);
 838        }
 839        return err;
 840}
 841
 842static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr,
 843                          struct kstat *stat)
 844{
 845        unsigned int blkbits;
 846        struct fuse_conn *fc = get_fuse_conn(inode);
 847
 848        /* see the comment in fuse_change_attributes() */
 849        if (fc->writeback_cache && S_ISREG(inode->i_mode)) {
 850                attr->size = i_size_read(inode);
 851                attr->mtime = inode->i_mtime.tv_sec;
 852                attr->mtimensec = inode->i_mtime.tv_nsec;
 853                attr->ctime = inode->i_ctime.tv_sec;
 854                attr->ctimensec = inode->i_ctime.tv_nsec;
 855        }
 856
 857        stat->dev = inode->i_sb->s_dev;
 858        stat->ino = attr->ino;
 859        stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777);
 860        stat->nlink = attr->nlink;
 861        stat->uid = make_kuid(&init_user_ns, attr->uid);
 862        stat->gid = make_kgid(&init_user_ns, attr->gid);
 863        stat->rdev = inode->i_rdev;
 864        stat->atime.tv_sec = attr->atime;
 865        stat->atime.tv_nsec = attr->atimensec;
 866        stat->mtime.tv_sec = attr->mtime;
 867        stat->mtime.tv_nsec = attr->mtimensec;
 868        stat->ctime.tv_sec = attr->ctime;
 869        stat->ctime.tv_nsec = attr->ctimensec;
 870        stat->size = attr->size;
 871        stat->blocks = attr->blocks;
 872
 873        if (attr->blksize != 0)
 874                blkbits = ilog2(attr->blksize);
 875        else
 876                blkbits = inode->i_sb->s_blocksize_bits;
 877
 878        stat->blksize = 1 << blkbits;
 879}
 880
 881static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
 882                           struct file *file)
 883{
 884        int err;
 885        struct fuse_getattr_in inarg;
 886        struct fuse_attr_out outarg;
 887        struct fuse_conn *fc = get_fuse_conn(inode);
 888        FUSE_ARGS(args);
 889        u64 attr_version;
 890
 891        attr_version = fuse_get_attr_version(fc);
 892
 893        memset(&inarg, 0, sizeof(inarg));
 894        memset(&outarg, 0, sizeof(outarg));
 895        /* Directories have separate file-handle space */
 896        if (file && S_ISREG(inode->i_mode)) {
 897                struct fuse_file *ff = file->private_data;
 898
 899                inarg.getattr_flags |= FUSE_GETATTR_FH;
 900                inarg.fh = ff->fh;
 901        }
 902        args.in.h.opcode = FUSE_GETATTR;
 903        args.in.h.nodeid = get_node_id(inode);
 904        args.in.numargs = 1;
 905        args.in.args[0].size = sizeof(inarg);
 906        args.in.args[0].value = &inarg;
 907        args.out.numargs = 1;
 908        args.out.args[0].size = sizeof(outarg);
 909        args.out.args[0].value = &outarg;
 910        err = fuse_simple_request(fc, &args);
 911        if (!err) {
 912                if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
 913                        make_bad_inode(inode);
 914                        err = -EIO;
 915                } else {
 916                        fuse_change_attributes(inode, &outarg.attr,
 917                                               attr_timeout(&outarg),
 918                                               attr_version);
 919                        if (stat)
 920                                fuse_fillattr(inode, &outarg.attr, stat);
 921                }
 922        }
 923        return err;
 924}
 925
 926static int fuse_update_get_attr(struct inode *inode, struct file *file,
 927                                struct kstat *stat)
 928{
 929        struct fuse_inode *fi = get_fuse_inode(inode);
 930        int err = 0;
 931
 932        if (time_before64(fi->i_time, get_jiffies_64())) {
 933                forget_all_cached_acls(inode);
 934                err = fuse_do_getattr(inode, stat, file);
 935        } else if (stat) {
 936                generic_fillattr(inode, stat);
 937                stat->mode = fi->orig_i_mode;
 938                stat->ino = fi->orig_ino;
 939        }
 940
 941        return err;
 942}
 943
 944int fuse_update_attributes(struct inode *inode, struct file *file)
 945{
 946        return fuse_update_get_attr(inode, file, NULL);
 947}
 948
 949int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
 950                             u64 child_nodeid, struct qstr *name)
 951{
 952        int err = -ENOTDIR;
 953        struct inode *parent;
 954        struct dentry *dir;
 955        struct dentry *entry;
 956
 957        parent = ilookup5(sb, parent_nodeid, fuse_inode_eq, &parent_nodeid);
 958        if (!parent)
 959                return -ENOENT;
 960
 961        inode_lock(parent);
 962        if (!S_ISDIR(parent->i_mode))
 963                goto unlock;
 964
 965        err = -ENOENT;
 966        dir = d_find_alias(parent);
 967        if (!dir)
 968                goto unlock;
 969
 970        name->hash = full_name_hash(dir, name->name, name->len);
 971        entry = d_lookup(dir, name);
 972        dput(dir);
 973        if (!entry)
 974                goto unlock;
 975
 976        fuse_invalidate_attr(parent);
 977        fuse_invalidate_entry(entry);
 978
 979        if (child_nodeid != 0 && d_really_is_positive(entry)) {
 980                inode_lock(d_inode(entry));
 981                if (get_node_id(d_inode(entry)) != child_nodeid) {
 982                        err = -ENOENT;
 983                        goto badentry;
 984                }
 985                if (d_mountpoint(entry)) {
 986                        err = -EBUSY;
 987                        goto badentry;
 988                }
 989                if (d_is_dir(entry)) {
 990                        shrink_dcache_parent(entry);
 991                        if (!simple_empty(entry)) {
 992                                err = -ENOTEMPTY;
 993                                goto badentry;
 994                        }
 995                        d_inode(entry)->i_flags |= S_DEAD;
 996                }
 997                dont_mount(entry);
 998                clear_nlink(d_inode(entry));
 999                err = 0;
1000 badentry:
1001                inode_unlock(d_inode(entry));
1002                if (!err)
1003                        d_delete(entry);
1004        } else {
1005                err = 0;
1006        }
1007        dput(entry);
1008
1009 unlock:
1010        inode_unlock(parent);
1011        iput(parent);
1012        return err;
1013}
1014
1015/*
1016 * Calling into a user-controlled filesystem gives the filesystem
1017 * daemon ptrace-like capabilities over the current process.  This
1018 * means, that the filesystem daemon is able to record the exact
1019 * filesystem operations performed, and can also control the behavior
1020 * of the requester process in otherwise impossible ways.  For example
1021 * it can delay the operation for arbitrary length of time allowing
1022 * DoS against the requester.
1023 *
1024 * For this reason only those processes can call into the filesystem,
1025 * for which the owner of the mount has ptrace privilege.  This
1026 * excludes processes started by other users, suid or sgid processes.
1027 */
1028int fuse_allow_current_process(struct fuse_conn *fc)
1029{
1030        const struct cred *cred;
1031
1032        if (fc->allow_other)
1033                return 1;
1034
1035        cred = current_cred();
1036        if (uid_eq(cred->euid, fc->user_id) &&
1037            uid_eq(cred->suid, fc->user_id) &&
1038            uid_eq(cred->uid,  fc->user_id) &&
1039            gid_eq(cred->egid, fc->group_id) &&
1040            gid_eq(cred->sgid, fc->group_id) &&
1041            gid_eq(cred->gid,  fc->group_id))
1042                return 1;
1043
1044        return 0;
1045}
1046
1047static int fuse_access(struct inode *inode, int mask)
1048{
1049        struct fuse_conn *fc = get_fuse_conn(inode);
1050        FUSE_ARGS(args);
1051        struct fuse_access_in inarg;
1052        int err;
1053
1054        BUG_ON(mask & MAY_NOT_BLOCK);
1055
1056        if (fc->no_access)
1057                return 0;
1058
1059        memset(&inarg, 0, sizeof(inarg));
1060        inarg.mask = mask & (MAY_READ | MAY_WRITE | MAY_EXEC);
1061        args.in.h.opcode = FUSE_ACCESS;
1062        args.in.h.nodeid = get_node_id(inode);
1063        args.in.numargs = 1;
1064        args.in.args[0].size = sizeof(inarg);
1065        args.in.args[0].value = &inarg;
1066        err = fuse_simple_request(fc, &args);
1067        if (err == -ENOSYS) {
1068                fc->no_access = 1;
1069                err = 0;
1070        }
1071        return err;
1072}
1073
1074static int fuse_perm_getattr(struct inode *inode, int mask)
1075{
1076        if (mask & MAY_NOT_BLOCK)
1077                return -ECHILD;
1078
1079        forget_all_cached_acls(inode);
1080        return fuse_do_getattr(inode, NULL, NULL);
1081}
1082
1083/*
1084 * Check permission.  The two basic access models of FUSE are:
1085 *
1086 * 1) Local access checking ('default_permissions' mount option) based
1087 * on file mode.  This is the plain old disk filesystem permission
1088 * modell.
1089 *
1090 * 2) "Remote" access checking, where server is responsible for
1091 * checking permission in each inode operation.  An exception to this
1092 * is if ->permission() was invoked from sys_access() in which case an
1093 * access request is sent.  Execute permission is still checked
1094 * locally based on file mode.
1095 */
1096static int fuse_permission(struct inode *inode, int mask)
1097{
1098        struct fuse_conn *fc = get_fuse_conn(inode);
1099        bool refreshed = false;
1100        int err = 0;
1101
1102        if (!fuse_allow_current_process(fc))
1103                return -EACCES;
1104
1105        /*
1106         * If attributes are needed, refresh them before proceeding
1107         */
1108        if (fc->default_permissions ||
1109            ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) {
1110                struct fuse_inode *fi = get_fuse_inode(inode);
1111
1112                if (time_before64(fi->i_time, get_jiffies_64())) {
1113                        refreshed = true;
1114
1115                        err = fuse_perm_getattr(inode, mask);
1116                        if (err)
1117                                return err;
1118                }
1119        }
1120
1121        if (fc->default_permissions) {
1122                err = generic_permission(inode, mask);
1123
1124                /* If permission is denied, try to refresh file
1125                   attributes.  This is also needed, because the root
1126                   node will at first have no permissions */
1127                if (err == -EACCES && !refreshed) {
1128                        err = fuse_perm_getattr(inode, mask);
1129                        if (!err)
1130                                err = generic_permission(inode, mask);
1131                }
1132
1133                /* Note: the opposite of the above test does not
1134                   exist.  So if permissions are revoked this won't be
1135                   noticed immediately, only after the attribute
1136                   timeout has expired */
1137        } else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
1138                err = fuse_access(inode, mask);
1139        } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
1140                if (!(inode->i_mode & S_IXUGO)) {
1141                        if (refreshed)
1142                                return -EACCES;
1143
1144                        err = fuse_perm_getattr(inode, mask);
1145                        if (!err && !(inode->i_mode & S_IXUGO))
1146                                return -EACCES;
1147                }
1148        }
1149        return err;
1150}
1151
1152static int parse_dirfile(char *buf, size_t nbytes, struct file *file,
1153                         struct dir_context *ctx)
1154{
1155        while (nbytes >= FUSE_NAME_OFFSET) {
1156                struct fuse_dirent *dirent = (struct fuse_dirent *) buf;
1157                size_t reclen = FUSE_DIRENT_SIZE(dirent);
1158                if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
1159                        return -EIO;
1160                if (reclen > nbytes)
1161                        break;
1162                if (memchr(dirent->name, '/', dirent->namelen) != NULL)
1163                        return -EIO;
1164
1165                if (!dir_emit(ctx, dirent->name, dirent->namelen,
1166                               dirent->ino, dirent->type))
1167                        break;
1168
1169                buf += reclen;
1170                nbytes -= reclen;
1171                ctx->pos = dirent->off;
1172        }
1173
1174        return 0;
1175}
1176
1177static int fuse_direntplus_link(struct file *file,
1178                                struct fuse_direntplus *direntplus,
1179                                u64 attr_version)
1180{
1181        struct fuse_entry_out *o = &direntplus->entry_out;
1182        struct fuse_dirent *dirent = &direntplus->dirent;
1183        struct dentry *parent = file->f_path.dentry;
1184        struct qstr name = QSTR_INIT(dirent->name, dirent->namelen);
1185        struct dentry *dentry;
1186        struct dentry *alias;
1187        struct inode *dir = d_inode(parent);
1188        struct fuse_conn *fc;
1189        struct inode *inode;
1190        DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
1191
1192        if (!o->nodeid) {
1193                /*
1194                 * Unlike in the case of fuse_lookup, zero nodeid does not mean
1195                 * ENOENT. Instead, it only means the userspace filesystem did
1196                 * not want to return attributes/handle for this entry.
1197                 *
1198                 * So do nothing.
1199                 */
1200                return 0;
1201        }
1202
1203        if (name.name[0] == '.') {
1204                /*
1205                 * We could potentially refresh the attributes of the directory
1206                 * and its parent?
1207                 */
1208                if (name.len == 1)
1209                        return 0;
1210                if (name.name[1] == '.' && name.len == 2)
1211                        return 0;
1212        }
1213
1214        if (invalid_nodeid(o->nodeid))
1215                return -EIO;
1216        if (!fuse_valid_type(o->attr.mode))
1217                return -EIO;
1218
1219        fc = get_fuse_conn(dir);
1220
1221        name.hash = full_name_hash(parent, name.name, name.len);
1222        dentry = d_lookup(parent, &name);
1223        if (!dentry) {
1224retry:
1225                dentry = d_alloc_parallel(parent, &name, &wq);
1226                if (IS_ERR(dentry))
1227                        return PTR_ERR(dentry);
1228        }
1229        if (!d_in_lookup(dentry)) {
1230                struct fuse_inode *fi;
1231                inode = d_inode(dentry);
1232                if (!inode ||
1233                    get_node_id(inode) != o->nodeid ||
1234                    ((o->attr.mode ^ inode->i_mode) & S_IFMT)) {
1235                        d_invalidate(dentry);
1236                        dput(dentry);
1237                        goto retry;
1238                }
1239                if (is_bad_inode(inode)) {
1240                        dput(dentry);
1241                        return -EIO;
1242                }
1243
1244                fi = get_fuse_inode(inode);
1245                spin_lock(&fc->lock);
1246                fi->nlookup++;
1247                spin_unlock(&fc->lock);
1248
1249                forget_all_cached_acls(inode);
1250                fuse_change_attributes(inode, &o->attr,
1251                                       entry_attr_timeout(o),
1252                                       attr_version);
1253                /*
1254                 * The other branch comes via fuse_iget()
1255                 * which bumps nlookup inside
1256                 */
1257        } else {
1258                inode = fuse_iget(dir->i_sb, o->nodeid, o->generation,
1259                                  &o->attr, entry_attr_timeout(o),
1260                                  attr_version);
1261                if (!inode)
1262                        inode = ERR_PTR(-ENOMEM);
1263
1264                alias = d_splice_alias(inode, dentry);
1265                d_lookup_done(dentry);
1266                if (alias) {
1267                        dput(dentry);
1268                        dentry = alias;
1269                }
1270                if (IS_ERR(dentry))
1271                        return PTR_ERR(dentry);
1272        }
1273        if (fc->readdirplus_auto)
1274                set_bit(FUSE_I_INIT_RDPLUS, &get_fuse_inode(inode)->state);
1275        fuse_change_entry_timeout(dentry, o);
1276
1277        dput(dentry);
1278        return 0;
1279}
1280
1281static int parse_dirplusfile(char *buf, size_t nbytes, struct file *file,
1282                             struct dir_context *ctx, u64 attr_version)
1283{
1284        struct fuse_direntplus *direntplus;
1285        struct fuse_dirent *dirent;
1286        size_t reclen;
1287        int over = 0;
1288        int ret;
1289
1290        while (nbytes >= FUSE_NAME_OFFSET_DIRENTPLUS) {
1291                direntplus = (struct fuse_direntplus *) buf;
1292                dirent = &direntplus->dirent;
1293                reclen = FUSE_DIRENTPLUS_SIZE(direntplus);
1294
1295                if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
1296                        return -EIO;
1297                if (reclen > nbytes)
1298                        break;
1299                if (memchr(dirent->name, '/', dirent->namelen) != NULL)
1300                        return -EIO;
1301
1302                if (!over) {
1303                        /* We fill entries into dstbuf only as much as
1304                           it can hold. But we still continue iterating
1305                           over remaining entries to link them. If not,
1306                           we need to send a FORGET for each of those
1307                           which we did not link.
1308                        */
1309                        over = !dir_emit(ctx, dirent->name, dirent->namelen,
1310                                       dirent->ino, dirent->type);
1311                        if (!over)
1312                                ctx->pos = dirent->off;
1313                }
1314
1315                buf += reclen;
1316                nbytes -= reclen;
1317
1318                ret = fuse_direntplus_link(file, direntplus, attr_version);
1319                if (ret)
1320                        fuse_force_forget(file, direntplus->entry_out.nodeid);
1321        }
1322
1323        return 0;
1324}
1325
1326static int fuse_readdir(struct file *file, struct dir_context *ctx)
1327{
1328        int plus, err;
1329        size_t nbytes;
1330        struct page *page;
1331        struct inode *inode = file_inode(file);
1332        struct fuse_conn *fc = get_fuse_conn(inode);
1333        struct fuse_req *req;
1334        u64 attr_version = 0;
1335
1336        if (is_bad_inode(inode))
1337                return -EIO;
1338
1339        req = fuse_get_req(fc, 1);
1340        if (IS_ERR(req))
1341                return PTR_ERR(req);
1342
1343        page = alloc_page(GFP_KERNEL);
1344        if (!page) {
1345                fuse_put_request(fc, req);
1346                return -ENOMEM;
1347        }
1348
1349        plus = fuse_use_readdirplus(inode, ctx);
1350        req->out.argpages = 1;
1351        req->num_pages = 1;
1352        req->pages[0] = page;
1353        req->page_descs[0].length = PAGE_SIZE;
1354        if (plus) {
1355                attr_version = fuse_get_attr_version(fc);
1356                fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
1357                               FUSE_READDIRPLUS);
1358        } else {
1359                fuse_read_fill(req, file, ctx->pos, PAGE_SIZE,
1360                               FUSE_READDIR);
1361        }
1362        fuse_lock_inode(inode);
1363        fuse_request_send(fc, req);
1364        fuse_unlock_inode(inode);
1365        nbytes = req->out.args[0].size;
1366        err = req->out.h.error;
1367        fuse_put_request(fc, req);
1368        if (!err) {
1369                if (plus) {
1370                        err = parse_dirplusfile(page_address(page), nbytes,
1371                                                file, ctx,
1372                                                attr_version);
1373                } else {
1374                        err = parse_dirfile(page_address(page), nbytes, file,
1375                                            ctx);
1376                }
1377        }
1378
1379        __free_page(page);
1380        fuse_invalidate_atime(inode);
1381        return err;
1382}
1383
1384static const char *fuse_get_link(struct dentry *dentry,
1385                                 struct inode *inode,
1386                                 struct delayed_call *done)
1387{
1388        struct fuse_conn *fc = get_fuse_conn(inode);
1389        FUSE_ARGS(args);
1390        char *link;
1391        ssize_t ret;
1392
1393        if (!dentry)
1394                return ERR_PTR(-ECHILD);
1395
1396        link = kmalloc(PAGE_SIZE, GFP_KERNEL);
1397        if (!link)
1398                return ERR_PTR(-ENOMEM);
1399
1400        args.in.h.opcode = FUSE_READLINK;
1401        args.in.h.nodeid = get_node_id(inode);
1402        args.out.argvar = 1;
1403        args.out.numargs = 1;
1404        args.out.args[0].size = PAGE_SIZE - 1;
1405        args.out.args[0].value = link;
1406        ret = fuse_simple_request(fc, &args);
1407        if (ret < 0) {
1408                kfree(link);
1409                link = ERR_PTR(ret);
1410        } else {
1411                link[ret] = '\0';
1412                set_delayed_call(done, kfree_link, link);
1413        }
1414        fuse_invalidate_atime(inode);
1415        return link;
1416}
1417
1418static int fuse_dir_open(struct inode *inode, struct file *file)
1419{
1420        return fuse_open_common(inode, file, true);
1421}
1422
1423static int fuse_dir_release(struct inode *inode, struct file *file)
1424{
1425        fuse_release_common(file, FUSE_RELEASEDIR);
1426
1427        return 0;
1428}
1429
1430static int fuse_dir_fsync(struct file *file, loff_t start, loff_t end,
1431                          int datasync)
1432{
1433        return fuse_fsync_common(file, start, end, datasync, 1);
1434}
1435
1436static long fuse_dir_ioctl(struct file *file, unsigned int cmd,
1437                            unsigned long arg)
1438{
1439        struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1440
1441        /* FUSE_IOCTL_DIR only supported for API version >= 7.18 */
1442        if (fc->minor < 18)
1443                return -ENOTTY;
1444
1445        return fuse_ioctl_common(file, cmd, arg, FUSE_IOCTL_DIR);
1446}
1447
1448static long fuse_dir_compat_ioctl(struct file *file, unsigned int cmd,
1449                                   unsigned long arg)
1450{
1451        struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1452
1453        if (fc->minor < 18)
1454                return -ENOTTY;
1455
1456        return fuse_ioctl_common(file, cmd, arg,
1457                                 FUSE_IOCTL_COMPAT | FUSE_IOCTL_DIR);
1458}
1459
1460static bool update_mtime(unsigned ivalid, bool trust_local_mtime)
1461{
1462        /* Always update if mtime is explicitly set  */
1463        if (ivalid & ATTR_MTIME_SET)
1464                return true;
1465
1466        /* Or if kernel i_mtime is the official one */
1467        if (trust_local_mtime)
1468                return true;
1469
1470        /* If it's an open(O_TRUNC) or an ftruncate(), don't update */
1471        if ((ivalid & ATTR_SIZE) && (ivalid & (ATTR_OPEN | ATTR_FILE)))
1472                return false;
1473
1474        /* In all other cases update */
1475        return true;
1476}
1477
1478static void iattr_to_fattr(struct iattr *iattr, struct fuse_setattr_in *arg,
1479                           bool trust_local_cmtime)
1480{
1481        unsigned ivalid = iattr->ia_valid;
1482
1483        if (ivalid & ATTR_MODE)
1484                arg->valid |= FATTR_MODE,   arg->mode = iattr->ia_mode;
1485        if (ivalid & ATTR_UID)
1486                arg->valid |= FATTR_UID,    arg->uid = from_kuid(&init_user_ns, iattr->ia_uid);
1487        if (ivalid & ATTR_GID)
1488                arg->valid |= FATTR_GID,    arg->gid = from_kgid(&init_user_ns, iattr->ia_gid);
1489        if (ivalid & ATTR_SIZE)
1490                arg->valid |= FATTR_SIZE,   arg->size = iattr->ia_size;
1491        if (ivalid & ATTR_ATIME) {
1492                arg->valid |= FATTR_ATIME;
1493                arg->atime = iattr->ia_atime.tv_sec;
1494                arg->atimensec = iattr->ia_atime.tv_nsec;
1495                if (!(ivalid & ATTR_ATIME_SET))
1496                        arg->valid |= FATTR_ATIME_NOW;
1497        }
1498        if ((ivalid & ATTR_MTIME) && update_mtime(ivalid, trust_local_cmtime)) {
1499                arg->valid |= FATTR_MTIME;
1500                arg->mtime = iattr->ia_mtime.tv_sec;
1501                arg->mtimensec = iattr->ia_mtime.tv_nsec;
1502                if (!(ivalid & ATTR_MTIME_SET) && !trust_local_cmtime)
1503                        arg->valid |= FATTR_MTIME_NOW;
1504        }
1505        if ((ivalid & ATTR_CTIME) && trust_local_cmtime) {
1506                arg->valid |= FATTR_CTIME;
1507                arg->ctime = iattr->ia_ctime.tv_sec;
1508                arg->ctimensec = iattr->ia_ctime.tv_nsec;
1509        }
1510}
1511
1512/*
1513 * Prevent concurrent writepages on inode
1514 *
1515 * This is done by adding a negative bias to the inode write counter
1516 * and waiting for all pending writes to finish.
1517 */
1518void fuse_set_nowrite(struct inode *inode)
1519{
1520        struct fuse_conn *fc = get_fuse_conn(inode);
1521        struct fuse_inode *fi = get_fuse_inode(inode);
1522
1523        BUG_ON(!inode_is_locked(inode));
1524
1525        spin_lock(&fc->lock);
1526        BUG_ON(fi->writectr < 0);
1527        fi->writectr += FUSE_NOWRITE;
1528        spin_unlock(&fc->lock);
1529        wait_event(fi->page_waitq, fi->writectr == FUSE_NOWRITE);
1530}
1531
1532/*
1533 * Allow writepages on inode
1534 *
1535 * Remove the bias from the writecounter and send any queued
1536 * writepages.
1537 */
1538static void __fuse_release_nowrite(struct inode *inode)
1539{
1540        struct fuse_inode *fi = get_fuse_inode(inode);
1541
1542        BUG_ON(fi->writectr != FUSE_NOWRITE);
1543        fi->writectr = 0;
1544        fuse_flush_writepages(inode);
1545}
1546
1547void fuse_release_nowrite(struct inode *inode)
1548{
1549        struct fuse_conn *fc = get_fuse_conn(inode);
1550
1551        spin_lock(&fc->lock);
1552        __fuse_release_nowrite(inode);
1553        spin_unlock(&fc->lock);
1554}
1555
1556static void fuse_setattr_fill(struct fuse_conn *fc, struct fuse_args *args,
1557                              struct inode *inode,
1558                              struct fuse_setattr_in *inarg_p,
1559                              struct fuse_attr_out *outarg_p)
1560{
1561        args->in.h.opcode = FUSE_SETATTR;
1562        args->in.h.nodeid = get_node_id(inode);
1563        args->in.numargs = 1;
1564        args->in.args[0].size = sizeof(*inarg_p);
1565        args->in.args[0].value = inarg_p;
1566        args->out.numargs = 1;
1567        args->out.args[0].size = sizeof(*outarg_p);
1568        args->out.args[0].value = outarg_p;
1569}
1570
1571/*
1572 * Flush inode->i_mtime to the server
1573 */
1574int fuse_flush_times(struct inode *inode, struct fuse_file *ff)
1575{
1576        struct fuse_conn *fc = get_fuse_conn(inode);
1577        FUSE_ARGS(args);
1578        struct fuse_setattr_in inarg;
1579        struct fuse_attr_out outarg;
1580
1581        memset(&inarg, 0, sizeof(inarg));
1582        memset(&outarg, 0, sizeof(outarg));
1583
1584        inarg.valid = FATTR_MTIME;
1585        inarg.mtime = inode->i_mtime.tv_sec;
1586        inarg.mtimensec = inode->i_mtime.tv_nsec;
1587        if (fc->minor >= 23) {
1588                inarg.valid |= FATTR_CTIME;
1589                inarg.ctime = inode->i_ctime.tv_sec;
1590                inarg.ctimensec = inode->i_ctime.tv_nsec;
1591        }
1592        if (ff) {
1593                inarg.valid |= FATTR_FH;
1594                inarg.fh = ff->fh;
1595        }
1596        fuse_setattr_fill(fc, &args, inode, &inarg, &outarg);
1597
1598        return fuse_simple_request(fc, &args);
1599}
1600
1601/*
1602 * Set attributes, and at the same time refresh them.
1603 *
1604 * Truncation is slightly complicated, because the 'truncate' request
1605 * may fail, in which case we don't want to touch the mapping.
1606 * vmtruncate() doesn't allow for this case, so do the rlimit checking
1607 * and the actual truncation by hand.
1608 */
1609int fuse_do_setattr(struct dentry *dentry, struct iattr *attr,
1610                    struct file *file)
1611{
1612        struct inode *inode = d_inode(dentry);
1613        struct fuse_conn *fc = get_fuse_conn(inode);
1614        struct fuse_inode *fi = get_fuse_inode(inode);
1615        FUSE_ARGS(args);
1616        struct fuse_setattr_in inarg;
1617        struct fuse_attr_out outarg;
1618        bool is_truncate = false;
1619        bool is_wb = fc->writeback_cache;
1620        loff_t oldsize;
1621        int err;
1622        bool trust_local_cmtime = is_wb && S_ISREG(inode->i_mode);
1623
1624        if (!fc->default_permissions)
1625                attr->ia_valid |= ATTR_FORCE;
1626
1627        err = setattr_prepare(dentry, attr);
1628        if (err)
1629                return err;
1630
1631        if (attr->ia_valid & ATTR_OPEN) {
1632                if (fc->atomic_o_trunc)
1633                        return 0;
1634                file = NULL;
1635        }
1636
1637        if (attr->ia_valid & ATTR_SIZE)
1638                is_truncate = true;
1639
1640        if (is_truncate) {
1641                fuse_set_nowrite(inode);
1642                set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1643                if (trust_local_cmtime && attr->ia_size != inode->i_size)
1644                        attr->ia_valid |= ATTR_MTIME | ATTR_CTIME;
1645        }
1646
1647        memset(&inarg, 0, sizeof(inarg));
1648        memset(&outarg, 0, sizeof(outarg));
1649        iattr_to_fattr(attr, &inarg, trust_local_cmtime);
1650        if (file) {
1651                struct fuse_file *ff = file->private_data;
1652                inarg.valid |= FATTR_FH;
1653                inarg.fh = ff->fh;
1654        }
1655        if (attr->ia_valid & ATTR_SIZE) {
1656                /* For mandatory locking in truncate */
1657                inarg.valid |= FATTR_LOCKOWNER;
1658                inarg.lock_owner = fuse_lock_owner_id(fc, current->files);
1659        }
1660        fuse_setattr_fill(fc, &args, inode, &inarg, &outarg);
1661        err = fuse_simple_request(fc, &args);
1662        if (err) {
1663                if (err == -EINTR)
1664                        fuse_invalidate_attr(inode);
1665                goto error;
1666        }
1667
1668        if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
1669                make_bad_inode(inode);
1670                err = -EIO;
1671                goto error;
1672        }
1673
1674        spin_lock(&fc->lock);
1675        /* the kernel maintains i_mtime locally */
1676        if (trust_local_cmtime) {
1677                if (attr->ia_valid & ATTR_MTIME)
1678                        inode->i_mtime = attr->ia_mtime;
1679                if (attr->ia_valid & ATTR_CTIME)
1680                        inode->i_ctime = attr->ia_ctime;
1681                /* FIXME: clear I_DIRTY_SYNC? */
1682        }
1683
1684        fuse_change_attributes_common(inode, &outarg.attr,
1685                                      attr_timeout(&outarg));
1686        oldsize = inode->i_size;
1687        /* see the comment in fuse_change_attributes() */
1688        if (!is_wb || is_truncate || !S_ISREG(inode->i_mode))
1689                i_size_write(inode, outarg.attr.size);
1690
1691        if (is_truncate) {
1692                /* NOTE: this may release/reacquire fc->lock */
1693                __fuse_release_nowrite(inode);
1694        }
1695        spin_unlock(&fc->lock);
1696
1697        /*
1698         * Only call invalidate_inode_pages2() after removing
1699         * FUSE_NOWRITE, otherwise fuse_launder_page() would deadlock.
1700         */
1701        if ((is_truncate || !is_wb) &&
1702            S_ISREG(inode->i_mode) && oldsize != outarg.attr.size) {
1703                truncate_pagecache(inode, outarg.attr.size);
1704                invalidate_inode_pages2(inode->i_mapping);
1705        }
1706
1707        clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1708        return 0;
1709
1710error:
1711        if (is_truncate)
1712                fuse_release_nowrite(inode);
1713
1714        clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1715        return err;
1716}
1717
1718static int fuse_setattr(struct dentry *entry, struct iattr *attr)
1719{
1720        struct inode *inode = d_inode(entry);
1721        struct fuse_conn *fc = get_fuse_conn(inode);
1722        struct file *file = (attr->ia_valid & ATTR_FILE) ? attr->ia_file : NULL;
1723        int ret;
1724
1725        if (!fuse_allow_current_process(get_fuse_conn(inode)))
1726                return -EACCES;
1727
1728        if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) {
1729                attr->ia_valid &= ~(ATTR_KILL_SUID | ATTR_KILL_SGID |
1730                                    ATTR_MODE);
1731
1732                /*
1733                 * The only sane way to reliably kill suid/sgid is to do it in
1734                 * the userspace filesystem
1735                 *
1736                 * This should be done on write(), truncate() and chown().
1737                 */
1738                if (!fc->handle_killpriv) {
1739                        /*
1740                         * ia_mode calculation may have used stale i_mode.
1741                         * Refresh and recalculate.
1742                         */
1743                        ret = fuse_do_getattr(inode, NULL, file);
1744                        if (ret)
1745                                return ret;
1746
1747                        attr->ia_mode = inode->i_mode;
1748                        if (inode->i_mode & S_ISUID) {
1749                                attr->ia_valid |= ATTR_MODE;
1750                                attr->ia_mode &= ~S_ISUID;
1751                        }
1752                        if ((inode->i_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
1753                                attr->ia_valid |= ATTR_MODE;
1754                                attr->ia_mode &= ~S_ISGID;
1755                        }
1756                }
1757        }
1758        if (!attr->ia_valid)
1759                return 0;
1760
1761        ret = fuse_do_setattr(entry, attr, file);
1762        if (!ret) {
1763                /*
1764                 * If filesystem supports acls it may have updated acl xattrs in
1765                 * the filesystem, so forget cached acls for the inode.
1766                 */
1767                if (fc->posix_acl)
1768                        forget_all_cached_acls(inode);
1769
1770                /* Directory mode changed, may need to revalidate access */
1771                if (d_is_dir(entry) && (attr->ia_valid & ATTR_MODE))
1772                        fuse_invalidate_entry_cache(entry);
1773        }
1774        return ret;
1775}
1776
1777static int fuse_getattr(const struct path *path, struct kstat *stat,
1778                        u32 request_mask, unsigned int flags)
1779{
1780        struct inode *inode = d_inode(path->dentry);
1781        struct fuse_conn *fc = get_fuse_conn(inode);
1782
1783        if (!fuse_allow_current_process(fc))
1784                return -EACCES;
1785
1786        return fuse_update_get_attr(inode, NULL, stat);
1787}
1788
1789static const struct inode_operations fuse_dir_inode_operations = {
1790        .lookup         = fuse_lookup,
1791        .mkdir          = fuse_mkdir,
1792        .symlink        = fuse_symlink,
1793        .unlink         = fuse_unlink,
1794        .rmdir          = fuse_rmdir,
1795        .rename         = fuse_rename2,
1796        .link           = fuse_link,
1797        .setattr        = fuse_setattr,
1798        .create         = fuse_create,
1799        .atomic_open    = fuse_atomic_open,
1800        .mknod          = fuse_mknod,
1801        .permission     = fuse_permission,
1802        .getattr        = fuse_getattr,
1803        .listxattr      = fuse_listxattr,
1804        .get_acl        = fuse_get_acl,
1805        .set_acl        = fuse_set_acl,
1806};
1807
1808static const struct file_operations fuse_dir_operations = {
1809        .llseek         = generic_file_llseek,
1810        .read           = generic_read_dir,
1811        .iterate_shared = fuse_readdir,
1812        .open           = fuse_dir_open,
1813        .release        = fuse_dir_release,
1814        .fsync          = fuse_dir_fsync,
1815        .unlocked_ioctl = fuse_dir_ioctl,
1816        .compat_ioctl   = fuse_dir_compat_ioctl,
1817};
1818
1819static const struct inode_operations fuse_common_inode_operations = {
1820        .setattr        = fuse_setattr,
1821        .permission     = fuse_permission,
1822        .getattr        = fuse_getattr,
1823        .listxattr      = fuse_listxattr,
1824        .get_acl        = fuse_get_acl,
1825        .set_acl        = fuse_set_acl,
1826};
1827
1828static const struct inode_operations fuse_symlink_inode_operations = {
1829        .setattr        = fuse_setattr,
1830        .get_link       = fuse_get_link,
1831        .getattr        = fuse_getattr,
1832        .listxattr      = fuse_listxattr,
1833};
1834
1835void fuse_init_common(struct inode *inode)
1836{
1837        inode->i_op = &fuse_common_inode_operations;
1838}
1839
1840void fuse_init_dir(struct inode *inode)
1841{
1842        inode->i_op = &fuse_dir_inode_operations;
1843        inode->i_fop = &fuse_dir_operations;
1844}
1845
1846void fuse_init_symlink(struct inode *inode)
1847{
1848        inode->i_op = &fuse_symlink_inode_operations;
1849}
1850