linux/fs/ubifs/dir.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/* * This file is part of UBIFS.
   3 *
   4 * Copyright (C) 2006-2008 Nokia Corporation.
   5 * Copyright (C) 2006, 2007 University of Szeged, Hungary
   6 *
   7 * Authors: Artem Bityutskiy (Битюцкий Артём)
   8 *          Adrian Hunter
   9 *          Zoltan Sogor
  10 */
  11
  12/*
  13 * This file implements directory operations.
  14 *
  15 * All FS operations in this file allocate budget before writing anything to the
  16 * media. If they fail to allocate it, the error is returned. The only
  17 * exceptions are 'ubifs_unlink()' and 'ubifs_rmdir()' which keep working even
  18 * if they unable to allocate the budget, because deletion %-ENOSPC failure is
  19 * not what users are usually ready to get. UBIFS budgeting subsystem has some
  20 * space reserved for these purposes.
  21 *
  22 * All operations in this file write all inodes which they change straight
  23 * away, instead of marking them dirty. For example, 'ubifs_link()' changes
  24 * @i_size of the parent inode and writes the parent inode together with the
  25 * target inode. This was done to simplify file-system recovery which would
  26 * otherwise be very difficult to do. The only exception is rename which marks
  27 * the re-named inode dirty (because its @i_ctime is updated) but does not
  28 * write it, but just marks it as dirty.
  29 */
  30
  31#include "ubifs.h"
  32
  33/**
  34 * inherit_flags - inherit flags of the parent inode.
  35 * @dir: parent inode
  36 * @mode: new inode mode flags
  37 *
  38 * This is a helper function for 'ubifs_new_inode()' which inherits flag of the
  39 * parent directory inode @dir. UBIFS inodes inherit the following flags:
  40 * o %UBIFS_COMPR_FL, which is useful to switch compression on/of on
  41 *   sub-directory basis;
  42 * o %UBIFS_SYNC_FL - useful for the same reasons;
  43 * o %UBIFS_DIRSYNC_FL - similar, but relevant only to directories.
  44 *
  45 * This function returns the inherited flags.
  46 */
  47static int inherit_flags(const struct inode *dir, umode_t mode)
  48{
  49        int flags;
  50        const struct ubifs_inode *ui = ubifs_inode(dir);
  51
  52        if (!S_ISDIR(dir->i_mode))
  53                /*
  54                 * The parent is not a directory, which means that an extended
  55                 * attribute inode is being created. No flags.
  56                 */
  57                return 0;
  58
  59        flags = ui->flags & (UBIFS_COMPR_FL | UBIFS_SYNC_FL | UBIFS_DIRSYNC_FL);
  60        if (!S_ISDIR(mode))
  61                /* The "DIRSYNC" flag only applies to directories */
  62                flags &= ~UBIFS_DIRSYNC_FL;
  63        return flags;
  64}
  65
  66/**
  67 * ubifs_new_inode - allocate new UBIFS inode object.
  68 * @c: UBIFS file-system description object
  69 * @dir: parent directory inode
  70 * @mode: inode mode flags
  71 *
  72 * This function finds an unused inode number, allocates new inode and
  73 * initializes it. Returns new inode in case of success and an error code in
  74 * case of failure.
  75 */
  76struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
  77                              umode_t mode)
  78{
  79        int err;
  80        struct inode *inode;
  81        struct ubifs_inode *ui;
  82        bool encrypted = false;
  83
  84        inode = new_inode(c->vfs_sb);
  85        ui = ubifs_inode(inode);
  86        if (!inode)
  87                return ERR_PTR(-ENOMEM);
  88
  89        /*
  90         * Set 'S_NOCMTIME' to prevent VFS form updating [mc]time of inodes and
  91         * marking them dirty in file write path (see 'file_update_time()').
  92         * UBIFS has to fully control "clean <-> dirty" transitions of inodes
  93         * to make budgeting work.
  94         */
  95        inode->i_flags |= S_NOCMTIME;
  96
  97        inode_init_owner(&init_user_ns, inode, dir, mode);
  98        inode->i_mtime = inode->i_atime = inode->i_ctime =
  99                         current_time(inode);
 100        inode->i_mapping->nrpages = 0;
 101
 102        err = fscrypt_prepare_new_inode(dir, inode, &encrypted);
 103        if (err) {
 104                ubifs_err(c, "fscrypt_prepare_new_inode failed: %i", err);
 105                goto out_iput;
 106        }
 107
 108        switch (mode & S_IFMT) {
 109        case S_IFREG:
 110                inode->i_mapping->a_ops = &ubifs_file_address_operations;
 111                inode->i_op = &ubifs_file_inode_operations;
 112                inode->i_fop = &ubifs_file_operations;
 113                break;
 114        case S_IFDIR:
 115                inode->i_op  = &ubifs_dir_inode_operations;
 116                inode->i_fop = &ubifs_dir_operations;
 117                inode->i_size = ui->ui_size = UBIFS_INO_NODE_SZ;
 118                break;
 119        case S_IFLNK:
 120                inode->i_op = &ubifs_symlink_inode_operations;
 121                break;
 122        case S_IFSOCK:
 123        case S_IFIFO:
 124        case S_IFBLK:
 125        case S_IFCHR:
 126                inode->i_op  = &ubifs_file_inode_operations;
 127                break;
 128        default:
 129                BUG();
 130        }
 131
 132        ui->flags = inherit_flags(dir, mode);
 133        ubifs_set_inode_flags(inode);
 134        if (S_ISREG(mode))
 135                ui->compr_type = c->default_compr;
 136        else
 137                ui->compr_type = UBIFS_COMPR_NONE;
 138        ui->synced_i_size = 0;
 139
 140        spin_lock(&c->cnt_lock);
 141        /* Inode number overflow is currently not supported */
 142        if (c->highest_inum >= INUM_WARN_WATERMARK) {
 143                if (c->highest_inum >= INUM_WATERMARK) {
 144                        spin_unlock(&c->cnt_lock);
 145                        ubifs_err(c, "out of inode numbers");
 146                        err = -EINVAL;
 147                        goto out_iput;
 148                }
 149                ubifs_warn(c, "running out of inode numbers (current %lu, max %u)",
 150                           (unsigned long)c->highest_inum, INUM_WATERMARK);
 151        }
 152
 153        inode->i_ino = ++c->highest_inum;
 154        /*
 155         * The creation sequence number remains with this inode for its
 156         * lifetime. All nodes for this inode have a greater sequence number,
 157         * and so it is possible to distinguish obsolete nodes belonging to a
 158         * previous incarnation of the same inode number - for example, for the
 159         * purpose of rebuilding the index.
 160         */
 161        ui->creat_sqnum = ++c->max_sqnum;
 162        spin_unlock(&c->cnt_lock);
 163
 164        if (encrypted) {
 165                err = fscrypt_set_context(inode, NULL);
 166                if (err) {
 167                        ubifs_err(c, "fscrypt_set_context failed: %i", err);
 168                        goto out_iput;
 169                }
 170        }
 171
 172        return inode;
 173
 174out_iput:
 175        make_bad_inode(inode);
 176        iput(inode);
 177        return ERR_PTR(err);
 178}
 179
 180static int dbg_check_name(const struct ubifs_info *c,
 181                          const struct ubifs_dent_node *dent,
 182                          const struct fscrypt_name *nm)
 183{
 184        if (!dbg_is_chk_gen(c))
 185                return 0;
 186        if (le16_to_cpu(dent->nlen) != fname_len(nm))
 187                return -EINVAL;
 188        if (memcmp(dent->name, fname_name(nm), fname_len(nm)))
 189                return -EINVAL;
 190        return 0;
 191}
 192
 193static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
 194                                   unsigned int flags)
 195{
 196        int err;
 197        union ubifs_key key;
 198        struct inode *inode = NULL;
 199        struct ubifs_dent_node *dent = NULL;
 200        struct ubifs_info *c = dir->i_sb->s_fs_info;
 201        struct fscrypt_name nm;
 202
 203        dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino);
 204
 205        err = fscrypt_prepare_lookup(dir, dentry, &nm);
 206        generic_set_encrypted_ci_d_ops(dentry);
 207        if (err == -ENOENT)
 208                return d_splice_alias(NULL, dentry);
 209        if (err)
 210                return ERR_PTR(err);
 211
 212        if (fname_len(&nm) > UBIFS_MAX_NLEN) {
 213                inode = ERR_PTR(-ENAMETOOLONG);
 214                goto done;
 215        }
 216
 217        dent = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
 218        if (!dent) {
 219                inode = ERR_PTR(-ENOMEM);
 220                goto done;
 221        }
 222
 223        if (fname_name(&nm) == NULL) {
 224                if (nm.hash & ~UBIFS_S_KEY_HASH_MASK)
 225                        goto done; /* ENOENT */
 226                dent_key_init_hash(c, &key, dir->i_ino, nm.hash);
 227                err = ubifs_tnc_lookup_dh(c, &key, dent, nm.minor_hash);
 228        } else {
 229                dent_key_init(c, &key, dir->i_ino, &nm);
 230                err = ubifs_tnc_lookup_nm(c, &key, dent, &nm);
 231        }
 232
 233        if (err) {
 234                if (err == -ENOENT)
 235                        dbg_gen("not found");
 236                else
 237                        inode = ERR_PTR(err);
 238                goto done;
 239        }
 240
 241        if (dbg_check_name(c, dent, &nm)) {
 242                inode = ERR_PTR(-EINVAL);
 243                goto done;
 244        }
 245
 246        inode = ubifs_iget(dir->i_sb, le64_to_cpu(dent->inum));
 247        if (IS_ERR(inode)) {
 248                /*
 249                 * This should not happen. Probably the file-system needs
 250                 * checking.
 251                 */
 252                err = PTR_ERR(inode);
 253                ubifs_err(c, "dead directory entry '%pd', error %d",
 254                          dentry, err);
 255                ubifs_ro_mode(c, err);
 256                goto done;
 257        }
 258
 259        if (IS_ENCRYPTED(dir) &&
 260            (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
 261            !fscrypt_has_permitted_context(dir, inode)) {
 262                ubifs_warn(c, "Inconsistent encryption contexts: %lu/%lu",
 263                           dir->i_ino, inode->i_ino);
 264                iput(inode);
 265                inode = ERR_PTR(-EPERM);
 266        }
 267
 268done:
 269        kfree(dent);
 270        fscrypt_free_filename(&nm);
 271        return d_splice_alias(inode, dentry);
 272}
 273
 274static int ubifs_prepare_create(struct inode *dir, struct dentry *dentry,
 275                                struct fscrypt_name *nm)
 276{
 277        if (fscrypt_is_nokey_name(dentry))
 278                return -ENOKEY;
 279
 280        return fscrypt_setup_filename(dir, &dentry->d_name, 0, nm);
 281}
 282
 283static int ubifs_create(struct user_namespace *mnt_userns, struct inode *dir,
 284                        struct dentry *dentry, umode_t mode, bool excl)
 285{
 286        struct inode *inode;
 287        struct ubifs_info *c = dir->i_sb->s_fs_info;
 288        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
 289                                        .dirtied_ino = 1 };
 290        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 291        struct fscrypt_name nm;
 292        int err, sz_change;
 293
 294        /*
 295         * Budget request settings: new inode, new direntry, changing the
 296         * parent directory inode.
 297         */
 298
 299        dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
 300                dentry, mode, dir->i_ino);
 301
 302        err = ubifs_budget_space(c, &req);
 303        if (err)
 304                return err;
 305
 306        err = ubifs_prepare_create(dir, dentry, &nm);
 307        if (err)
 308                goto out_budg;
 309
 310        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 311
 312        inode = ubifs_new_inode(c, dir, mode);
 313        if (IS_ERR(inode)) {
 314                err = PTR_ERR(inode);
 315                goto out_fname;
 316        }
 317
 318        err = ubifs_init_security(dir, inode, &dentry->d_name);
 319        if (err)
 320                goto out_inode;
 321
 322        mutex_lock(&dir_ui->ui_mutex);
 323        dir->i_size += sz_change;
 324        dir_ui->ui_size = dir->i_size;
 325        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 326        err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0);
 327        if (err)
 328                goto out_cancel;
 329        mutex_unlock(&dir_ui->ui_mutex);
 330
 331        ubifs_release_budget(c, &req);
 332        fscrypt_free_filename(&nm);
 333        insert_inode_hash(inode);
 334        d_instantiate(dentry, inode);
 335        return 0;
 336
 337out_cancel:
 338        dir->i_size -= sz_change;
 339        dir_ui->ui_size = dir->i_size;
 340        mutex_unlock(&dir_ui->ui_mutex);
 341out_inode:
 342        make_bad_inode(inode);
 343        iput(inode);
 344out_fname:
 345        fscrypt_free_filename(&nm);
 346out_budg:
 347        ubifs_release_budget(c, &req);
 348        ubifs_err(c, "cannot create regular file, error %d", err);
 349        return err;
 350}
 351
 352static int do_tmpfile(struct inode *dir, struct dentry *dentry,
 353                      umode_t mode, struct inode **whiteout)
 354{
 355        struct inode *inode;
 356        struct ubifs_info *c = dir->i_sb->s_fs_info;
 357        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1};
 358        struct ubifs_budget_req ino_req = { .dirtied_ino = 1 };
 359        struct ubifs_inode *ui, *dir_ui = ubifs_inode(dir);
 360        int err, instantiated = 0;
 361        struct fscrypt_name nm;
 362
 363        /*
 364         * Budget request settings: new dirty inode, new direntry,
 365         * budget for dirtied inode will be released via writeback.
 366         */
 367
 368        dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
 369                dentry, mode, dir->i_ino);
 370
 371        err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm);
 372        if (err)
 373                return err;
 374
 375        err = ubifs_budget_space(c, &req);
 376        if (err) {
 377                fscrypt_free_filename(&nm);
 378                return err;
 379        }
 380
 381        err = ubifs_budget_space(c, &ino_req);
 382        if (err) {
 383                ubifs_release_budget(c, &req);
 384                fscrypt_free_filename(&nm);
 385                return err;
 386        }
 387
 388        inode = ubifs_new_inode(c, dir, mode);
 389        if (IS_ERR(inode)) {
 390                err = PTR_ERR(inode);
 391                goto out_budg;
 392        }
 393        ui = ubifs_inode(inode);
 394
 395        if (whiteout) {
 396                init_special_inode(inode, inode->i_mode, WHITEOUT_DEV);
 397                ubifs_assert(c, inode->i_op == &ubifs_file_inode_operations);
 398        }
 399
 400        err = ubifs_init_security(dir, inode, &dentry->d_name);
 401        if (err)
 402                goto out_inode;
 403
 404        mutex_lock(&ui->ui_mutex);
 405        insert_inode_hash(inode);
 406
 407        if (whiteout) {
 408                mark_inode_dirty(inode);
 409                drop_nlink(inode);
 410                *whiteout = inode;
 411        } else {
 412                d_tmpfile(dentry, inode);
 413        }
 414        ubifs_assert(c, ui->dirty);
 415
 416        instantiated = 1;
 417        mutex_unlock(&ui->ui_mutex);
 418
 419        mutex_lock(&dir_ui->ui_mutex);
 420        err = ubifs_jnl_update(c, dir, &nm, inode, 1, 0);
 421        if (err)
 422                goto out_cancel;
 423        mutex_unlock(&dir_ui->ui_mutex);
 424
 425        ubifs_release_budget(c, &req);
 426
 427        return 0;
 428
 429out_cancel:
 430        mutex_unlock(&dir_ui->ui_mutex);
 431out_inode:
 432        make_bad_inode(inode);
 433        if (!instantiated)
 434                iput(inode);
 435out_budg:
 436        ubifs_release_budget(c, &req);
 437        if (!instantiated)
 438                ubifs_release_budget(c, &ino_req);
 439        fscrypt_free_filename(&nm);
 440        ubifs_err(c, "cannot create temporary file, error %d", err);
 441        return err;
 442}
 443
 444static int ubifs_tmpfile(struct user_namespace *mnt_userns, struct inode *dir,
 445                         struct dentry *dentry, umode_t mode)
 446{
 447        return do_tmpfile(dir, dentry, mode, NULL);
 448}
 449
 450/**
 451 * vfs_dent_type - get VFS directory entry type.
 452 * @type: UBIFS directory entry type
 453 *
 454 * This function converts UBIFS directory entry type into VFS directory entry
 455 * type.
 456 */
 457static unsigned int vfs_dent_type(uint8_t type)
 458{
 459        switch (type) {
 460        case UBIFS_ITYPE_REG:
 461                return DT_REG;
 462        case UBIFS_ITYPE_DIR:
 463                return DT_DIR;
 464        case UBIFS_ITYPE_LNK:
 465                return DT_LNK;
 466        case UBIFS_ITYPE_BLK:
 467                return DT_BLK;
 468        case UBIFS_ITYPE_CHR:
 469                return DT_CHR;
 470        case UBIFS_ITYPE_FIFO:
 471                return DT_FIFO;
 472        case UBIFS_ITYPE_SOCK:
 473                return DT_SOCK;
 474        default:
 475                BUG();
 476        }
 477        return 0;
 478}
 479
 480/*
 481 * The classical Unix view for directory is that it is a linear array of
 482 * (name, inode number) entries. Linux/VFS assumes this model as well.
 483 * Particularly, 'readdir()' call wants us to return a directory entry offset
 484 * which later may be used to continue 'readdir()'ing the directory or to
 485 * 'seek()' to that specific direntry. Obviously UBIFS does not really fit this
 486 * model because directory entries are identified by keys, which may collide.
 487 *
 488 * UBIFS uses directory entry hash value for directory offsets, so
 489 * 'seekdir()'/'telldir()' may not always work because of possible key
 490 * collisions. But UBIFS guarantees that consecutive 'readdir()' calls work
 491 * properly by means of saving full directory entry name in the private field
 492 * of the file description object.
 493 *
 494 * This means that UBIFS cannot support NFS which requires full
 495 * 'seekdir()'/'telldir()' support.
 496 */
 497static int ubifs_readdir(struct file *file, struct dir_context *ctx)
 498{
 499        int fstr_real_len = 0, err = 0;
 500        struct fscrypt_name nm;
 501        struct fscrypt_str fstr = {0};
 502        union ubifs_key key;
 503        struct ubifs_dent_node *dent;
 504        struct inode *dir = file_inode(file);
 505        struct ubifs_info *c = dir->i_sb->s_fs_info;
 506        bool encrypted = IS_ENCRYPTED(dir);
 507
 508        dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, ctx->pos);
 509
 510        if (ctx->pos > UBIFS_S_KEY_HASH_MASK || ctx->pos == 2)
 511                /*
 512                 * The directory was seek'ed to a senseless position or there
 513                 * are no more entries.
 514                 */
 515                return 0;
 516
 517        if (encrypted) {
 518                err = fscrypt_prepare_readdir(dir);
 519                if (err)
 520                        return err;
 521
 522                err = fscrypt_fname_alloc_buffer(UBIFS_MAX_NLEN, &fstr);
 523                if (err)
 524                        return err;
 525
 526                fstr_real_len = fstr.len;
 527        }
 528
 529        if (file->f_version == 0) {
 530                /*
 531                 * The file was seek'ed, which means that @file->private_data
 532                 * is now invalid. This may also be just the first
 533                 * 'ubifs_readdir()' invocation, in which case
 534                 * @file->private_data is NULL, and the below code is
 535                 * basically a no-op.
 536                 */
 537                kfree(file->private_data);
 538                file->private_data = NULL;
 539        }
 540
 541        /*
 542         * 'generic_file_llseek()' unconditionally sets @file->f_version to
 543         * zero, and we use this for detecting whether the file was seek'ed.
 544         */
 545        file->f_version = 1;
 546
 547        /* File positions 0 and 1 correspond to "." and ".." */
 548        if (ctx->pos < 2) {
 549                ubifs_assert(c, !file->private_data);
 550                if (!dir_emit_dots(file, ctx)) {
 551                        if (encrypted)
 552                                fscrypt_fname_free_buffer(&fstr);
 553                        return 0;
 554                }
 555
 556                /* Find the first entry in TNC and save it */
 557                lowest_dent_key(c, &key, dir->i_ino);
 558                fname_len(&nm) = 0;
 559                dent = ubifs_tnc_next_ent(c, &key, &nm);
 560                if (IS_ERR(dent)) {
 561                        err = PTR_ERR(dent);
 562                        goto out;
 563                }
 564
 565                ctx->pos = key_hash_flash(c, &dent->key);
 566                file->private_data = dent;
 567        }
 568
 569        dent = file->private_data;
 570        if (!dent) {
 571                /*
 572                 * The directory was seek'ed to and is now readdir'ed.
 573                 * Find the entry corresponding to @ctx->pos or the closest one.
 574                 */
 575                dent_key_init_hash(c, &key, dir->i_ino, ctx->pos);
 576                fname_len(&nm) = 0;
 577                dent = ubifs_tnc_next_ent(c, &key, &nm);
 578                if (IS_ERR(dent)) {
 579                        err = PTR_ERR(dent);
 580                        goto out;
 581                }
 582                ctx->pos = key_hash_flash(c, &dent->key);
 583                file->private_data = dent;
 584        }
 585
 586        while (1) {
 587                dbg_gen("ino %llu, new f_pos %#x",
 588                        (unsigned long long)le64_to_cpu(dent->inum),
 589                        key_hash_flash(c, &dent->key));
 590                ubifs_assert(c, le64_to_cpu(dent->ch.sqnum) >
 591                             ubifs_inode(dir)->creat_sqnum);
 592
 593                fname_len(&nm) = le16_to_cpu(dent->nlen);
 594                fname_name(&nm) = dent->name;
 595
 596                if (encrypted) {
 597                        fstr.len = fstr_real_len;
 598
 599                        err = fscrypt_fname_disk_to_usr(dir, key_hash_flash(c,
 600                                                        &dent->key),
 601                                                        le32_to_cpu(dent->cookie),
 602                                                        &nm.disk_name, &fstr);
 603                        if (err)
 604                                goto out;
 605                } else {
 606                        fstr.len = fname_len(&nm);
 607                        fstr.name = fname_name(&nm);
 608                }
 609
 610                if (!dir_emit(ctx, fstr.name, fstr.len,
 611                               le64_to_cpu(dent->inum),
 612                               vfs_dent_type(dent->type))) {
 613                        if (encrypted)
 614                                fscrypt_fname_free_buffer(&fstr);
 615                        return 0;
 616                }
 617
 618                /* Switch to the next entry */
 619                key_read(c, &dent->key, &key);
 620                dent = ubifs_tnc_next_ent(c, &key, &nm);
 621                if (IS_ERR(dent)) {
 622                        err = PTR_ERR(dent);
 623                        goto out;
 624                }
 625
 626                kfree(file->private_data);
 627                ctx->pos = key_hash_flash(c, &dent->key);
 628                file->private_data = dent;
 629                cond_resched();
 630        }
 631
 632out:
 633        kfree(file->private_data);
 634        file->private_data = NULL;
 635
 636        if (encrypted)
 637                fscrypt_fname_free_buffer(&fstr);
 638
 639        if (err != -ENOENT)
 640                ubifs_err(c, "cannot find next direntry, error %d", err);
 641        else
 642                /*
 643                 * -ENOENT is a non-fatal error in this context, the TNC uses
 644                 * it to indicate that the cursor moved past the current directory
 645                 * and readdir() has to stop.
 646                 */
 647                err = 0;
 648
 649
 650        /* 2 is a special value indicating that there are no more direntries */
 651        ctx->pos = 2;
 652        return err;
 653}
 654
 655/* Free saved readdir() state when the directory is closed */
 656static int ubifs_dir_release(struct inode *dir, struct file *file)
 657{
 658        kfree(file->private_data);
 659        file->private_data = NULL;
 660        return 0;
 661}
 662
 663/**
 664 * lock_2_inodes - a wrapper for locking two UBIFS inodes.
 665 * @inode1: first inode
 666 * @inode2: second inode
 667 *
 668 * We do not implement any tricks to guarantee strict lock ordering, because
 669 * VFS has already done it for us on the @i_mutex. So this is just a simple
 670 * wrapper function.
 671 */
 672static void lock_2_inodes(struct inode *inode1, struct inode *inode2)
 673{
 674        mutex_lock_nested(&ubifs_inode(inode1)->ui_mutex, WB_MUTEX_1);
 675        mutex_lock_nested(&ubifs_inode(inode2)->ui_mutex, WB_MUTEX_2);
 676}
 677
 678/**
 679 * unlock_2_inodes - a wrapper for unlocking two UBIFS inodes.
 680 * @inode1: first inode
 681 * @inode2: second inode
 682 */
 683static void unlock_2_inodes(struct inode *inode1, struct inode *inode2)
 684{
 685        mutex_unlock(&ubifs_inode(inode2)->ui_mutex);
 686        mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
 687}
 688
 689static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
 690                      struct dentry *dentry)
 691{
 692        struct ubifs_info *c = dir->i_sb->s_fs_info;
 693        struct inode *inode = d_inode(old_dentry);
 694        struct ubifs_inode *ui = ubifs_inode(inode);
 695        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 696        int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 697        struct ubifs_budget_req req = { .new_dent = 1, .dirtied_ino = 2,
 698                                .dirtied_ino_d = ALIGN(ui->data_len, 8) };
 699        struct fscrypt_name nm;
 700
 701        /*
 702         * Budget request settings: new direntry, changing the target inode,
 703         * changing the parent inode.
 704         */
 705
 706        dbg_gen("dent '%pd' to ino %lu (nlink %d) in dir ino %lu",
 707                dentry, inode->i_ino,
 708                inode->i_nlink, dir->i_ino);
 709        ubifs_assert(c, inode_is_locked(dir));
 710        ubifs_assert(c, inode_is_locked(inode));
 711
 712        err = fscrypt_prepare_link(old_dentry, dir, dentry);
 713        if (err)
 714                return err;
 715
 716        err = fscrypt_setup_filename(dir, &dentry->d_name, 0, &nm);
 717        if (err)
 718                return err;
 719
 720        err = dbg_check_synced_i_size(c, inode);
 721        if (err)
 722                goto out_fname;
 723
 724        err = ubifs_budget_space(c, &req);
 725        if (err)
 726                goto out_fname;
 727
 728        lock_2_inodes(dir, inode);
 729
 730        /* Handle O_TMPFILE corner case, it is allowed to link a O_TMPFILE. */
 731        if (inode->i_nlink == 0)
 732                ubifs_delete_orphan(c, inode->i_ino);
 733
 734        inc_nlink(inode);
 735        ihold(inode);
 736        inode->i_ctime = current_time(inode);
 737        dir->i_size += sz_change;
 738        dir_ui->ui_size = dir->i_size;
 739        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 740        err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0);
 741        if (err)
 742                goto out_cancel;
 743        unlock_2_inodes(dir, inode);
 744
 745        ubifs_release_budget(c, &req);
 746        d_instantiate(dentry, inode);
 747        fscrypt_free_filename(&nm);
 748        return 0;
 749
 750out_cancel:
 751        dir->i_size -= sz_change;
 752        dir_ui->ui_size = dir->i_size;
 753        drop_nlink(inode);
 754        if (inode->i_nlink == 0)
 755                ubifs_add_orphan(c, inode->i_ino);
 756        unlock_2_inodes(dir, inode);
 757        ubifs_release_budget(c, &req);
 758        iput(inode);
 759out_fname:
 760        fscrypt_free_filename(&nm);
 761        return err;
 762}
 763
 764static int ubifs_unlink(struct inode *dir, struct dentry *dentry)
 765{
 766        struct ubifs_info *c = dir->i_sb->s_fs_info;
 767        struct inode *inode = d_inode(dentry);
 768        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 769        int err, sz_change, budgeted = 1;
 770        struct ubifs_budget_req req = { .mod_dent = 1, .dirtied_ino = 2 };
 771        unsigned int saved_nlink = inode->i_nlink;
 772        struct fscrypt_name nm;
 773
 774        /*
 775         * Budget request settings: deletion direntry, deletion inode (+1 for
 776         * @dirtied_ino), changing the parent directory inode. If budgeting
 777         * fails, go ahead anyway because we have extra space reserved for
 778         * deletions.
 779         */
 780
 781        dbg_gen("dent '%pd' from ino %lu (nlink %d) in dir ino %lu",
 782                dentry, inode->i_ino,
 783                inode->i_nlink, dir->i_ino);
 784
 785        err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &nm);
 786        if (err)
 787                return err;
 788
 789        err = ubifs_purge_xattrs(inode);
 790        if (err)
 791                return err;
 792
 793        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 794
 795        ubifs_assert(c, inode_is_locked(dir));
 796        ubifs_assert(c, inode_is_locked(inode));
 797        err = dbg_check_synced_i_size(c, inode);
 798        if (err)
 799                goto out_fname;
 800
 801        err = ubifs_budget_space(c, &req);
 802        if (err) {
 803                if (err != -ENOSPC)
 804                        goto out_fname;
 805                budgeted = 0;
 806        }
 807
 808        lock_2_inodes(dir, inode);
 809        inode->i_ctime = current_time(dir);
 810        drop_nlink(inode);
 811        dir->i_size -= sz_change;
 812        dir_ui->ui_size = dir->i_size;
 813        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 814        err = ubifs_jnl_update(c, dir, &nm, inode, 1, 0);
 815        if (err)
 816                goto out_cancel;
 817        unlock_2_inodes(dir, inode);
 818
 819        if (budgeted)
 820                ubifs_release_budget(c, &req);
 821        else {
 822                /* We've deleted something - clean the "no space" flags */
 823                c->bi.nospace = c->bi.nospace_rp = 0;
 824                smp_wmb();
 825        }
 826        fscrypt_free_filename(&nm);
 827        return 0;
 828
 829out_cancel:
 830        dir->i_size += sz_change;
 831        dir_ui->ui_size = dir->i_size;
 832        set_nlink(inode, saved_nlink);
 833        unlock_2_inodes(dir, inode);
 834        if (budgeted)
 835                ubifs_release_budget(c, &req);
 836out_fname:
 837        fscrypt_free_filename(&nm);
 838        return err;
 839}
 840
 841/**
 842 * check_dir_empty - check if a directory is empty or not.
 843 * @dir: VFS inode object of the directory to check
 844 *
 845 * This function checks if directory @dir is empty. Returns zero if the
 846 * directory is empty, %-ENOTEMPTY if it is not, and other negative error codes
 847 * in case of errors.
 848 */
 849int ubifs_check_dir_empty(struct inode *dir)
 850{
 851        struct ubifs_info *c = dir->i_sb->s_fs_info;
 852        struct fscrypt_name nm = { 0 };
 853        struct ubifs_dent_node *dent;
 854        union ubifs_key key;
 855        int err;
 856
 857        lowest_dent_key(c, &key, dir->i_ino);
 858        dent = ubifs_tnc_next_ent(c, &key, &nm);
 859        if (IS_ERR(dent)) {
 860                err = PTR_ERR(dent);
 861                if (err == -ENOENT)
 862                        err = 0;
 863        } else {
 864                kfree(dent);
 865                err = -ENOTEMPTY;
 866        }
 867        return err;
 868}
 869
 870static int ubifs_rmdir(struct inode *dir, struct dentry *dentry)
 871{
 872        struct ubifs_info *c = dir->i_sb->s_fs_info;
 873        struct inode *inode = d_inode(dentry);
 874        int err, sz_change, budgeted = 1;
 875        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 876        struct ubifs_budget_req req = { .mod_dent = 1, .dirtied_ino = 2 };
 877        struct fscrypt_name nm;
 878
 879        /*
 880         * Budget request settings: deletion direntry, deletion inode and
 881         * changing the parent inode. If budgeting fails, go ahead anyway
 882         * because we have extra space reserved for deletions.
 883         */
 884
 885        dbg_gen("directory '%pd', ino %lu in dir ino %lu", dentry,
 886                inode->i_ino, dir->i_ino);
 887        ubifs_assert(c, inode_is_locked(dir));
 888        ubifs_assert(c, inode_is_locked(inode));
 889        err = ubifs_check_dir_empty(d_inode(dentry));
 890        if (err)
 891                return err;
 892
 893        err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &nm);
 894        if (err)
 895                return err;
 896
 897        err = ubifs_purge_xattrs(inode);
 898        if (err)
 899                return err;
 900
 901        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 902
 903        err = ubifs_budget_space(c, &req);
 904        if (err) {
 905                if (err != -ENOSPC)
 906                        goto out_fname;
 907                budgeted = 0;
 908        }
 909
 910        lock_2_inodes(dir, inode);
 911        inode->i_ctime = current_time(dir);
 912        clear_nlink(inode);
 913        drop_nlink(dir);
 914        dir->i_size -= sz_change;
 915        dir_ui->ui_size = dir->i_size;
 916        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 917        err = ubifs_jnl_update(c, dir, &nm, inode, 1, 0);
 918        if (err)
 919                goto out_cancel;
 920        unlock_2_inodes(dir, inode);
 921
 922        if (budgeted)
 923                ubifs_release_budget(c, &req);
 924        else {
 925                /* We've deleted something - clean the "no space" flags */
 926                c->bi.nospace = c->bi.nospace_rp = 0;
 927                smp_wmb();
 928        }
 929        fscrypt_free_filename(&nm);
 930        return 0;
 931
 932out_cancel:
 933        dir->i_size += sz_change;
 934        dir_ui->ui_size = dir->i_size;
 935        inc_nlink(dir);
 936        set_nlink(inode, 2);
 937        unlock_2_inodes(dir, inode);
 938        if (budgeted)
 939                ubifs_release_budget(c, &req);
 940out_fname:
 941        fscrypt_free_filename(&nm);
 942        return err;
 943}
 944
 945static int ubifs_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
 946                       struct dentry *dentry, umode_t mode)
 947{
 948        struct inode *inode;
 949        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 950        struct ubifs_info *c = dir->i_sb->s_fs_info;
 951        int err, sz_change;
 952        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1 };
 953        struct fscrypt_name nm;
 954
 955        /*
 956         * Budget request settings: new inode, new direntry and changing parent
 957         * directory inode.
 958         */
 959
 960        dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
 961                dentry, mode, dir->i_ino);
 962
 963        err = ubifs_budget_space(c, &req);
 964        if (err)
 965                return err;
 966
 967        err = ubifs_prepare_create(dir, dentry, &nm);
 968        if (err)
 969                goto out_budg;
 970
 971        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 972
 973        inode = ubifs_new_inode(c, dir, S_IFDIR | mode);
 974        if (IS_ERR(inode)) {
 975                err = PTR_ERR(inode);
 976                goto out_fname;
 977        }
 978
 979        err = ubifs_init_security(dir, inode, &dentry->d_name);
 980        if (err)
 981                goto out_inode;
 982
 983        mutex_lock(&dir_ui->ui_mutex);
 984        insert_inode_hash(inode);
 985        inc_nlink(inode);
 986        inc_nlink(dir);
 987        dir->i_size += sz_change;
 988        dir_ui->ui_size = dir->i_size;
 989        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 990        err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0);
 991        if (err) {
 992                ubifs_err(c, "cannot create directory, error %d", err);
 993                goto out_cancel;
 994        }
 995        mutex_unlock(&dir_ui->ui_mutex);
 996
 997        ubifs_release_budget(c, &req);
 998        d_instantiate(dentry, inode);
 999        fscrypt_free_filename(&nm);
1000        return 0;
1001
1002out_cancel:
1003        dir->i_size -= sz_change;
1004        dir_ui->ui_size = dir->i_size;
1005        drop_nlink(dir);
1006        mutex_unlock(&dir_ui->ui_mutex);
1007out_inode:
1008        make_bad_inode(inode);
1009        iput(inode);
1010out_fname:
1011        fscrypt_free_filename(&nm);
1012out_budg:
1013        ubifs_release_budget(c, &req);
1014        return err;
1015}
1016
1017static int ubifs_mknod(struct user_namespace *mnt_userns, struct inode *dir,
1018                       struct dentry *dentry, umode_t mode, dev_t rdev)
1019{
1020        struct inode *inode;
1021        struct ubifs_inode *ui;
1022        struct ubifs_inode *dir_ui = ubifs_inode(dir);
1023        struct ubifs_info *c = dir->i_sb->s_fs_info;
1024        union ubifs_dev_desc *dev = NULL;
1025        int sz_change;
1026        int err, devlen = 0;
1027        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
1028                                        .dirtied_ino = 1 };
1029        struct fscrypt_name nm;
1030
1031        /*
1032         * Budget request settings: new inode, new direntry and changing parent
1033         * directory inode.
1034         */
1035
1036        dbg_gen("dent '%pd' in dir ino %lu", dentry, dir->i_ino);
1037
1038        if (S_ISBLK(mode) || S_ISCHR(mode)) {
1039                dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
1040                if (!dev)
1041                        return -ENOMEM;
1042                devlen = ubifs_encode_dev(dev, rdev);
1043        }
1044
1045        req.new_ino_d = ALIGN(devlen, 8);
1046        err = ubifs_budget_space(c, &req);
1047        if (err) {
1048                kfree(dev);
1049                return err;
1050        }
1051
1052        err = ubifs_prepare_create(dir, dentry, &nm);
1053        if (err) {
1054                kfree(dev);
1055                goto out_budg;
1056        }
1057
1058        sz_change = CALC_DENT_SIZE(fname_len(&nm));
1059
1060        inode = ubifs_new_inode(c, dir, mode);
1061        if (IS_ERR(inode)) {
1062                kfree(dev);
1063                err = PTR_ERR(inode);
1064                goto out_fname;
1065        }
1066
1067        init_special_inode(inode, inode->i_mode, rdev);
1068        inode->i_size = ubifs_inode(inode)->ui_size = devlen;
1069        ui = ubifs_inode(inode);
1070        ui->data = dev;
1071        ui->data_len = devlen;
1072
1073        err = ubifs_init_security(dir, inode, &dentry->d_name);
1074        if (err)
1075                goto out_inode;
1076
1077        mutex_lock(&dir_ui->ui_mutex);
1078        dir->i_size += sz_change;
1079        dir_ui->ui_size = dir->i_size;
1080        dir->i_mtime = dir->i_ctime = inode->i_ctime;
1081        err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0);
1082        if (err)
1083                goto out_cancel;
1084        mutex_unlock(&dir_ui->ui_mutex);
1085
1086        ubifs_release_budget(c, &req);
1087        insert_inode_hash(inode);
1088        d_instantiate(dentry, inode);
1089        fscrypt_free_filename(&nm);
1090        return 0;
1091
1092out_cancel:
1093        dir->i_size -= sz_change;
1094        dir_ui->ui_size = dir->i_size;
1095        mutex_unlock(&dir_ui->ui_mutex);
1096out_inode:
1097        make_bad_inode(inode);
1098        iput(inode);
1099out_fname:
1100        fscrypt_free_filename(&nm);
1101out_budg:
1102        ubifs_release_budget(c, &req);
1103        return err;
1104}
1105
1106static int ubifs_symlink(struct user_namespace *mnt_userns, struct inode *dir,
1107                         struct dentry *dentry, const char *symname)
1108{
1109        struct inode *inode;
1110        struct ubifs_inode *ui;
1111        struct ubifs_inode *dir_ui = ubifs_inode(dir);
1112        struct ubifs_info *c = dir->i_sb->s_fs_info;
1113        int err, sz_change, len = strlen(symname);
1114        struct fscrypt_str disk_link;
1115        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
1116                                        .new_ino_d = ALIGN(len, 8),
1117                                        .dirtied_ino = 1 };
1118        struct fscrypt_name nm;
1119
1120        dbg_gen("dent '%pd', target '%s' in dir ino %lu", dentry,
1121                symname, dir->i_ino);
1122
1123        err = fscrypt_prepare_symlink(dir, symname, len, UBIFS_MAX_INO_DATA,
1124                                      &disk_link);
1125        if (err)
1126                return err;
1127
1128        /*
1129         * Budget request settings: new inode, new direntry and changing parent
1130         * directory inode.
1131         */
1132        err = ubifs_budget_space(c, &req);
1133        if (err)
1134                return err;
1135
1136        err = ubifs_prepare_create(dir, dentry, &nm);
1137        if (err)
1138                goto out_budg;
1139
1140        sz_change = CALC_DENT_SIZE(fname_len(&nm));
1141
1142        inode = ubifs_new_inode(c, dir, S_IFLNK | S_IRWXUGO);
1143        if (IS_ERR(inode)) {
1144                err = PTR_ERR(inode);
1145                goto out_fname;
1146        }
1147
1148        ui = ubifs_inode(inode);
1149        ui->data = kmalloc(disk_link.len, GFP_NOFS);
1150        if (!ui->data) {
1151                err = -ENOMEM;
1152                goto out_inode;
1153        }
1154
1155        if (IS_ENCRYPTED(inode)) {
1156                disk_link.name = ui->data; /* encrypt directly into ui->data */
1157                err = fscrypt_encrypt_symlink(inode, symname, len, &disk_link);
1158                if (err)
1159                        goto out_inode;
1160        } else {
1161                memcpy(ui->data, disk_link.name, disk_link.len);
1162                inode->i_link = ui->data;
1163        }
1164
1165        /*
1166         * The terminating zero byte is not written to the flash media and it
1167         * is put just to make later in-memory string processing simpler. Thus,
1168         * data length is @disk_link.len - 1, not @disk_link.len.
1169         */
1170        ui->data_len = disk_link.len - 1;
1171        inode->i_size = ubifs_inode(inode)->ui_size = disk_link.len - 1;
1172
1173        err = ubifs_init_security(dir, inode, &dentry->d_name);
1174        if (err)
1175                goto out_inode;
1176
1177        mutex_lock(&dir_ui->ui_mutex);
1178        dir->i_size += sz_change;
1179        dir_ui->ui_size = dir->i_size;
1180        dir->i_mtime = dir->i_ctime = inode->i_ctime;
1181        err = ubifs_jnl_update(c, dir, &nm, inode, 0, 0);
1182        if (err)
1183                goto out_cancel;
1184        mutex_unlock(&dir_ui->ui_mutex);
1185
1186        insert_inode_hash(inode);
1187        d_instantiate(dentry, inode);
1188        err = 0;
1189        goto out_fname;
1190
1191out_cancel:
1192        dir->i_size -= sz_change;
1193        dir_ui->ui_size = dir->i_size;
1194        mutex_unlock(&dir_ui->ui_mutex);
1195out_inode:
1196        make_bad_inode(inode);
1197        iput(inode);
1198out_fname:
1199        fscrypt_free_filename(&nm);
1200out_budg:
1201        ubifs_release_budget(c, &req);
1202        return err;
1203}
1204
1205/**
1206 * lock_4_inodes - a wrapper for locking three UBIFS inodes.
1207 * @inode1: first inode
1208 * @inode2: second inode
1209 * @inode3: third inode
1210 * @inode4: fouth inode
1211 *
1212 * This function is used for 'ubifs_rename()' and @inode1 may be the same as
1213 * @inode2 whereas @inode3 and @inode4 may be %NULL.
1214 *
1215 * We do not implement any tricks to guarantee strict lock ordering, because
1216 * VFS has already done it for us on the @i_mutex. So this is just a simple
1217 * wrapper function.
1218 */
1219static void lock_4_inodes(struct inode *inode1, struct inode *inode2,
1220                          struct inode *inode3, struct inode *inode4)
1221{
1222        mutex_lock_nested(&ubifs_inode(inode1)->ui_mutex, WB_MUTEX_1);
1223        if (inode2 != inode1)
1224                mutex_lock_nested(&ubifs_inode(inode2)->ui_mutex, WB_MUTEX_2);
1225        if (inode3)
1226                mutex_lock_nested(&ubifs_inode(inode3)->ui_mutex, WB_MUTEX_3);
1227        if (inode4)
1228                mutex_lock_nested(&ubifs_inode(inode4)->ui_mutex, WB_MUTEX_4);
1229}
1230
1231/**
1232 * unlock_4_inodes - a wrapper for unlocking three UBIFS inodes for rename.
1233 * @inode1: first inode
1234 * @inode2: second inode
1235 * @inode3: third inode
1236 * @inode4: fouth inode
1237 */
1238static void unlock_4_inodes(struct inode *inode1, struct inode *inode2,
1239                            struct inode *inode3, struct inode *inode4)
1240{
1241        if (inode4)
1242                mutex_unlock(&ubifs_inode(inode4)->ui_mutex);
1243        if (inode3)
1244                mutex_unlock(&ubifs_inode(inode3)->ui_mutex);
1245        if (inode1 != inode2)
1246                mutex_unlock(&ubifs_inode(inode2)->ui_mutex);
1247        mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
1248}
1249
1250static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
1251                     struct inode *new_dir, struct dentry *new_dentry,
1252                     unsigned int flags)
1253{
1254        struct ubifs_info *c = old_dir->i_sb->s_fs_info;
1255        struct inode *old_inode = d_inode(old_dentry);
1256        struct inode *new_inode = d_inode(new_dentry);
1257        struct inode *whiteout = NULL;
1258        struct ubifs_inode *old_inode_ui = ubifs_inode(old_inode);
1259        struct ubifs_inode *whiteout_ui = NULL;
1260        int err, release, sync = 0, move = (new_dir != old_dir);
1261        int is_dir = S_ISDIR(old_inode->i_mode);
1262        int unlink = !!new_inode, new_sz, old_sz;
1263        struct ubifs_budget_req req = { .new_dent = 1, .mod_dent = 1,
1264                                        .dirtied_ino = 3 };
1265        struct ubifs_budget_req ino_req = { .dirtied_ino = 1,
1266                        .dirtied_ino_d = ALIGN(old_inode_ui->data_len, 8) };
1267        struct timespec64 time;
1268        unsigned int saved_nlink;
1269        struct fscrypt_name old_nm, new_nm;
1270
1271        /*
1272         * Budget request settings: deletion direntry, new direntry, removing
1273         * the old inode, and changing old and new parent directory inodes.
1274         *
1275         * However, this operation also marks the target inode as dirty and
1276         * does not write it, so we allocate budget for the target inode
1277         * separately.
1278         */
1279
1280        dbg_gen("dent '%pd' ino %lu in dir ino %lu to dent '%pd' in dir ino %lu flags 0x%x",
1281                old_dentry, old_inode->i_ino, old_dir->i_ino,
1282                new_dentry, new_dir->i_ino, flags);
1283
1284        if (unlink) {
1285                ubifs_assert(c, inode_is_locked(new_inode));
1286
1287                err = ubifs_purge_xattrs(new_inode);
1288                if (err)
1289                        return err;
1290        }
1291
1292        if (unlink && is_dir) {
1293                err = ubifs_check_dir_empty(new_inode);
1294                if (err)
1295                        return err;
1296        }
1297
1298        err = fscrypt_setup_filename(old_dir, &old_dentry->d_name, 0, &old_nm);
1299        if (err)
1300                return err;
1301
1302        err = fscrypt_setup_filename(new_dir, &new_dentry->d_name, 0, &new_nm);
1303        if (err) {
1304                fscrypt_free_filename(&old_nm);
1305                return err;
1306        }
1307
1308        new_sz = CALC_DENT_SIZE(fname_len(&new_nm));
1309        old_sz = CALC_DENT_SIZE(fname_len(&old_nm));
1310
1311        err = ubifs_budget_space(c, &req);
1312        if (err) {
1313                fscrypt_free_filename(&old_nm);
1314                fscrypt_free_filename(&new_nm);
1315                return err;
1316        }
1317        err = ubifs_budget_space(c, &ino_req);
1318        if (err) {
1319                fscrypt_free_filename(&old_nm);
1320                fscrypt_free_filename(&new_nm);
1321                ubifs_release_budget(c, &req);
1322                return err;
1323        }
1324
1325        if (flags & RENAME_WHITEOUT) {
1326                union ubifs_dev_desc *dev = NULL;
1327
1328                dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
1329                if (!dev) {
1330                        err = -ENOMEM;
1331                        goto out_release;
1332                }
1333
1334                err = do_tmpfile(old_dir, old_dentry, S_IFCHR | WHITEOUT_MODE, &whiteout);
1335                if (err) {
1336                        kfree(dev);
1337                        goto out_release;
1338                }
1339
1340                spin_lock(&whiteout->i_lock);
1341                whiteout->i_state |= I_LINKABLE;
1342                spin_unlock(&whiteout->i_lock);
1343
1344                whiteout_ui = ubifs_inode(whiteout);
1345                whiteout_ui->data = dev;
1346                whiteout_ui->data_len = ubifs_encode_dev(dev, MKDEV(0, 0));
1347                ubifs_assert(c, !whiteout_ui->dirty);
1348        }
1349
1350        lock_4_inodes(old_dir, new_dir, new_inode, whiteout);
1351
1352        /*
1353         * Like most other Unix systems, set the @i_ctime for inodes on a
1354         * rename.
1355         */
1356        time = current_time(old_dir);
1357        old_inode->i_ctime = time;
1358
1359        /* We must adjust parent link count when renaming directories */
1360        if (is_dir) {
1361                if (move) {
1362                        /*
1363                         * @old_dir loses a link because we are moving
1364                         * @old_inode to a different directory.
1365                         */
1366                        drop_nlink(old_dir);
1367                        /*
1368                         * @new_dir only gains a link if we are not also
1369                         * overwriting an existing directory.
1370                         */
1371                        if (!unlink)
1372                                inc_nlink(new_dir);
1373                } else {
1374                        /*
1375                         * @old_inode is not moving to a different directory,
1376                         * but @old_dir still loses a link if we are
1377                         * overwriting an existing directory.
1378                         */
1379                        if (unlink)
1380                                drop_nlink(old_dir);
1381                }
1382        }
1383
1384        old_dir->i_size -= old_sz;
1385        ubifs_inode(old_dir)->ui_size = old_dir->i_size;
1386        old_dir->i_mtime = old_dir->i_ctime = time;
1387        new_dir->i_mtime = new_dir->i_ctime = time;
1388
1389        /*
1390         * And finally, if we unlinked a direntry which happened to have the
1391         * same name as the moved direntry, we have to decrement @i_nlink of
1392         * the unlinked inode and change its ctime.
1393         */
1394        if (unlink) {
1395                /*
1396                 * Directories cannot have hard-links, so if this is a
1397                 * directory, just clear @i_nlink.
1398                 */
1399                saved_nlink = new_inode->i_nlink;
1400                if (is_dir)
1401                        clear_nlink(new_inode);
1402                else
1403                        drop_nlink(new_inode);
1404                new_inode->i_ctime = time;
1405        } else {
1406                new_dir->i_size += new_sz;
1407                ubifs_inode(new_dir)->ui_size = new_dir->i_size;
1408        }
1409
1410        /*
1411         * Do not ask 'ubifs_jnl_rename()' to flush write-buffer if @old_inode
1412         * is dirty, because this will be done later on at the end of
1413         * 'ubifs_rename()'.
1414         */
1415        if (IS_SYNC(old_inode)) {
1416                sync = IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir);
1417                if (unlink && IS_SYNC(new_inode))
1418                        sync = 1;
1419        }
1420
1421        if (whiteout) {
1422                struct ubifs_budget_req wht_req = { .dirtied_ino = 1,
1423                                .dirtied_ino_d = \
1424                                ALIGN(ubifs_inode(whiteout)->data_len, 8) };
1425
1426                err = ubifs_budget_space(c, &wht_req);
1427                if (err) {
1428                        kfree(whiteout_ui->data);
1429                        whiteout_ui->data_len = 0;
1430                        iput(whiteout);
1431                        goto out_release;
1432                }
1433
1434                inc_nlink(whiteout);
1435                mark_inode_dirty(whiteout);
1436
1437                spin_lock(&whiteout->i_lock);
1438                whiteout->i_state &= ~I_LINKABLE;
1439                spin_unlock(&whiteout->i_lock);
1440
1441                iput(whiteout);
1442        }
1443
1444        err = ubifs_jnl_rename(c, old_dir, old_inode, &old_nm, new_dir,
1445                               new_inode, &new_nm, whiteout, sync);
1446        if (err)
1447                goto out_cancel;
1448
1449        unlock_4_inodes(old_dir, new_dir, new_inode, whiteout);
1450        ubifs_release_budget(c, &req);
1451
1452        mutex_lock(&old_inode_ui->ui_mutex);
1453        release = old_inode_ui->dirty;
1454        mark_inode_dirty_sync(old_inode);
1455        mutex_unlock(&old_inode_ui->ui_mutex);
1456
1457        if (release)
1458                ubifs_release_budget(c, &ino_req);
1459        if (IS_SYNC(old_inode))
1460                err = old_inode->i_sb->s_op->write_inode(old_inode, NULL);
1461
1462        fscrypt_free_filename(&old_nm);
1463        fscrypt_free_filename(&new_nm);
1464        return err;
1465
1466out_cancel:
1467        if (unlink) {
1468                set_nlink(new_inode, saved_nlink);
1469        } else {
1470                new_dir->i_size -= new_sz;
1471                ubifs_inode(new_dir)->ui_size = new_dir->i_size;
1472        }
1473        old_dir->i_size += old_sz;
1474        ubifs_inode(old_dir)->ui_size = old_dir->i_size;
1475        if (is_dir) {
1476                if (move) {
1477                        inc_nlink(old_dir);
1478                        if (!unlink)
1479                                drop_nlink(new_dir);
1480                } else {
1481                        if (unlink)
1482                                inc_nlink(old_dir);
1483                }
1484        }
1485        if (whiteout) {
1486                drop_nlink(whiteout);
1487                iput(whiteout);
1488        }
1489        unlock_4_inodes(old_dir, new_dir, new_inode, whiteout);
1490out_release:
1491        ubifs_release_budget(c, &ino_req);
1492        ubifs_release_budget(c, &req);
1493        fscrypt_free_filename(&old_nm);
1494        fscrypt_free_filename(&new_nm);
1495        return err;
1496}
1497
1498static int ubifs_xrename(struct inode *old_dir, struct dentry *old_dentry,
1499                        struct inode *new_dir, struct dentry *new_dentry)
1500{
1501        struct ubifs_info *c = old_dir->i_sb->s_fs_info;
1502        struct ubifs_budget_req req = { .new_dent = 1, .mod_dent = 1,
1503                                .dirtied_ino = 2 };
1504        int sync = IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir);
1505        struct inode *fst_inode = d_inode(old_dentry);
1506        struct inode *snd_inode = d_inode(new_dentry);
1507        struct timespec64 time;
1508        int err;
1509        struct fscrypt_name fst_nm, snd_nm;
1510
1511        ubifs_assert(c, fst_inode && snd_inode);
1512
1513        err = fscrypt_setup_filename(old_dir, &old_dentry->d_name, 0, &fst_nm);
1514        if (err)
1515                return err;
1516
1517        err = fscrypt_setup_filename(new_dir, &new_dentry->d_name, 0, &snd_nm);
1518        if (err) {
1519                fscrypt_free_filename(&fst_nm);
1520                return err;
1521        }
1522
1523        lock_4_inodes(old_dir, new_dir, NULL, NULL);
1524
1525        time = current_time(old_dir);
1526        fst_inode->i_ctime = time;
1527        snd_inode->i_ctime = time;
1528        old_dir->i_mtime = old_dir->i_ctime = time;
1529        new_dir->i_mtime = new_dir->i_ctime = time;
1530
1531        if (old_dir != new_dir) {
1532                if (S_ISDIR(fst_inode->i_mode) && !S_ISDIR(snd_inode->i_mode)) {
1533                        inc_nlink(new_dir);
1534                        drop_nlink(old_dir);
1535                }
1536                else if (!S_ISDIR(fst_inode->i_mode) && S_ISDIR(snd_inode->i_mode)) {
1537                        drop_nlink(new_dir);
1538                        inc_nlink(old_dir);
1539                }
1540        }
1541
1542        err = ubifs_jnl_xrename(c, old_dir, fst_inode, &fst_nm, new_dir,
1543                                snd_inode, &snd_nm, sync);
1544
1545        unlock_4_inodes(old_dir, new_dir, NULL, NULL);
1546        ubifs_release_budget(c, &req);
1547
1548        fscrypt_free_filename(&fst_nm);
1549        fscrypt_free_filename(&snd_nm);
1550        return err;
1551}
1552
1553static int ubifs_rename(struct user_namespace *mnt_userns,
1554                        struct inode *old_dir, struct dentry *old_dentry,
1555                        struct inode *new_dir, struct dentry *new_dentry,
1556                        unsigned int flags)
1557{
1558        int err;
1559        struct ubifs_info *c = old_dir->i_sb->s_fs_info;
1560
1561        if (flags & ~(RENAME_NOREPLACE | RENAME_WHITEOUT | RENAME_EXCHANGE))
1562                return -EINVAL;
1563
1564        ubifs_assert(c, inode_is_locked(old_dir));
1565        ubifs_assert(c, inode_is_locked(new_dir));
1566
1567        err = fscrypt_prepare_rename(old_dir, old_dentry, new_dir, new_dentry,
1568                                     flags);
1569        if (err)
1570                return err;
1571
1572        if (flags & RENAME_EXCHANGE)
1573                return ubifs_xrename(old_dir, old_dentry, new_dir, new_dentry);
1574
1575        return do_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
1576}
1577
1578int ubifs_getattr(struct user_namespace *mnt_userns, const struct path *path,
1579                  struct kstat *stat, u32 request_mask, unsigned int flags)
1580{
1581        loff_t size;
1582        struct inode *inode = d_inode(path->dentry);
1583        struct ubifs_inode *ui = ubifs_inode(inode);
1584
1585        mutex_lock(&ui->ui_mutex);
1586
1587        if (ui->flags & UBIFS_APPEND_FL)
1588                stat->attributes |= STATX_ATTR_APPEND;
1589        if (ui->flags & UBIFS_COMPR_FL)
1590                stat->attributes |= STATX_ATTR_COMPRESSED;
1591        if (ui->flags & UBIFS_CRYPT_FL)
1592                stat->attributes |= STATX_ATTR_ENCRYPTED;
1593        if (ui->flags & UBIFS_IMMUTABLE_FL)
1594                stat->attributes |= STATX_ATTR_IMMUTABLE;
1595
1596        stat->attributes_mask |= (STATX_ATTR_APPEND |
1597                                STATX_ATTR_COMPRESSED |
1598                                STATX_ATTR_ENCRYPTED |
1599                                STATX_ATTR_IMMUTABLE);
1600
1601        generic_fillattr(&init_user_ns, inode, stat);
1602        stat->blksize = UBIFS_BLOCK_SIZE;
1603        stat->size = ui->ui_size;
1604
1605        /*
1606         * Unfortunately, the 'stat()' system call was designed for block
1607         * device based file systems, and it is not appropriate for UBIFS,
1608         * because UBIFS does not have notion of "block". For example, it is
1609         * difficult to tell how many block a directory takes - it actually
1610         * takes less than 300 bytes, but we have to round it to block size,
1611         * which introduces large mistake. This makes utilities like 'du' to
1612         * report completely senseless numbers. This is the reason why UBIFS
1613         * goes the same way as JFFS2 - it reports zero blocks for everything
1614         * but regular files, which makes more sense than reporting completely
1615         * wrong sizes.
1616         */
1617        if (S_ISREG(inode->i_mode)) {
1618                size = ui->xattr_size;
1619                size += stat->size;
1620                size = ALIGN(size, UBIFS_BLOCK_SIZE);
1621                /*
1622                 * Note, user-space expects 512-byte blocks count irrespectively
1623                 * of what was reported in @stat->size.
1624                 */
1625                stat->blocks = size >> 9;
1626        } else
1627                stat->blocks = 0;
1628        mutex_unlock(&ui->ui_mutex);
1629        return 0;
1630}
1631
1632const struct inode_operations ubifs_dir_inode_operations = {
1633        .lookup      = ubifs_lookup,
1634        .create      = ubifs_create,
1635        .link        = ubifs_link,
1636        .symlink     = ubifs_symlink,
1637        .unlink      = ubifs_unlink,
1638        .mkdir       = ubifs_mkdir,
1639        .rmdir       = ubifs_rmdir,
1640        .mknod       = ubifs_mknod,
1641        .rename      = ubifs_rename,
1642        .setattr     = ubifs_setattr,
1643        .getattr     = ubifs_getattr,
1644        .listxattr   = ubifs_listxattr,
1645        .update_time = ubifs_update_time,
1646        .tmpfile     = ubifs_tmpfile,
1647        .fileattr_get = ubifs_fileattr_get,
1648        .fileattr_set = ubifs_fileattr_set,
1649};
1650
1651const struct file_operations ubifs_dir_operations = {
1652        .llseek         = generic_file_llseek,
1653        .release        = ubifs_dir_release,
1654        .read           = generic_read_dir,
1655        .iterate_shared = ubifs_readdir,
1656        .fsync          = ubifs_fsync,
1657        .unlocked_ioctl = ubifs_ioctl,
1658#ifdef CONFIG_COMPAT
1659        .compat_ioctl   = ubifs_compat_ioctl,
1660#endif
1661};
1662