linux/fs/ubifs/dir.c
<<
>>
Prefs
   1/* * This file is part of UBIFS.
   2 *
   3 * Copyright (C) 2006-2008 Nokia Corporation.
   4 * Copyright (C) 2006, 2007 University of Szeged, Hungary
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License version 2 as published by
   8 * the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but WITHOUT
  11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13 * more details.
  14 *
  15 * You should have received a copy of the GNU General Public License along with
  16 * this program; if not, write to the Free Software Foundation, Inc., 51
  17 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  18 *
  19 * Authors: Artem Bityutskiy (Битюцкий Артём)
  20 *          Adrian Hunter
  21 *          Zoltan Sogor
  22 */
  23
  24/*
  25 * This file implements directory operations.
  26 *
  27 * All FS operations in this file allocate budget before writing anything to the
  28 * media. If they fail to allocate it, the error is returned. The only
  29 * exceptions are 'ubifs_unlink()' and 'ubifs_rmdir()' which keep working even
  30 * if they unable to allocate the budget, because deletion %-ENOSPC failure is
  31 * not what users are usually ready to get. UBIFS budgeting subsystem has some
  32 * space reserved for these purposes.
  33 *
  34 * All operations in this file write all inodes which they change straight
  35 * away, instead of marking them dirty. For example, 'ubifs_link()' changes
  36 * @i_size of the parent inode and writes the parent inode together with the
  37 * target inode. This was done to simplify file-system recovery which would
  38 * otherwise be very difficult to do. The only exception is rename which marks
  39 * the re-named inode dirty (because its @i_ctime is updated) but does not
  40 * write it, but just marks it as dirty.
  41 */
  42
  43#include "ubifs.h"
  44
  45/**
  46 * inherit_flags - inherit flags of the parent inode.
  47 * @dir: parent inode
  48 * @mode: new inode mode flags
  49 *
  50 * This is a helper function for 'ubifs_new_inode()' which inherits flag of the
  51 * parent directory inode @dir. UBIFS inodes inherit the following flags:
  52 * o %UBIFS_COMPR_FL, which is useful to switch compression on/of on
  53 *   sub-directory basis;
  54 * o %UBIFS_SYNC_FL - useful for the same reasons;
  55 * o %UBIFS_DIRSYNC_FL - similar, but relevant only to directories.
  56 *
  57 * This function returns the inherited flags.
  58 */
  59static int inherit_flags(const struct inode *dir, umode_t mode)
  60{
  61        int flags;
  62        const struct ubifs_inode *ui = ubifs_inode(dir);
  63
  64        if (!S_ISDIR(dir->i_mode))
  65                /*
  66                 * The parent is not a directory, which means that an extended
  67                 * attribute inode is being created. No flags.
  68                 */
  69                return 0;
  70
  71        flags = ui->flags & (UBIFS_COMPR_FL | UBIFS_SYNC_FL | UBIFS_DIRSYNC_FL);
  72        if (!S_ISDIR(mode))
  73                /* The "DIRSYNC" flag only applies to directories */
  74                flags &= ~UBIFS_DIRSYNC_FL;
  75        return flags;
  76}
  77
  78/**
  79 * ubifs_new_inode - allocate new UBIFS inode object.
  80 * @c: UBIFS file-system description object
  81 * @dir: parent directory inode
  82 * @mode: inode mode flags
  83 *
  84 * This function finds an unused inode number, allocates new inode and
  85 * initializes it. Returns new inode in case of success and an error code in
  86 * case of failure.
  87 */
  88struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir,
  89                              umode_t mode)
  90{
  91        struct inode *inode;
  92        struct ubifs_inode *ui;
  93
  94        inode = new_inode(c->vfs_sb);
  95        ui = ubifs_inode(inode);
  96        if (!inode)
  97                return ERR_PTR(-ENOMEM);
  98
  99        /*
 100         * Set 'S_NOCMTIME' to prevent VFS form updating [mc]time of inodes and
 101         * marking them dirty in file write path (see 'file_update_time()').
 102         * UBIFS has to fully control "clean <-> dirty" transitions of inodes
 103         * to make budgeting work.
 104         */
 105        inode->i_flags |= S_NOCMTIME;
 106
 107        inode_init_owner(inode, dir, mode);
 108        inode->i_mtime = inode->i_atime = inode->i_ctime =
 109                         ubifs_current_time(inode);
 110        inode->i_mapping->nrpages = 0;
 111        /* Disable readahead */
 112        inode->i_mapping->backing_dev_info = &c->bdi;
 113
 114        switch (mode & S_IFMT) {
 115        case S_IFREG:
 116                inode->i_mapping->a_ops = &ubifs_file_address_operations;
 117                inode->i_op = &ubifs_file_inode_operations;
 118                inode->i_fop = &ubifs_file_operations;
 119                break;
 120        case S_IFDIR:
 121                inode->i_op  = &ubifs_dir_inode_operations;
 122                inode->i_fop = &ubifs_dir_operations;
 123                inode->i_size = ui->ui_size = UBIFS_INO_NODE_SZ;
 124                break;
 125        case S_IFLNK:
 126                inode->i_op = &ubifs_symlink_inode_operations;
 127                break;
 128        case S_IFSOCK:
 129        case S_IFIFO:
 130        case S_IFBLK:
 131        case S_IFCHR:
 132                inode->i_op  = &ubifs_file_inode_operations;
 133                break;
 134        default:
 135                BUG();
 136        }
 137
 138        ui->flags = inherit_flags(dir, mode);
 139        ubifs_set_inode_flags(inode);
 140        if (S_ISREG(mode))
 141                ui->compr_type = c->default_compr;
 142        else
 143                ui->compr_type = UBIFS_COMPR_NONE;
 144        ui->synced_i_size = 0;
 145
 146        spin_lock(&c->cnt_lock);
 147        /* Inode number overflow is currently not supported */
 148        if (c->highest_inum >= INUM_WARN_WATERMARK) {
 149                if (c->highest_inum >= INUM_WATERMARK) {
 150                        spin_unlock(&c->cnt_lock);
 151                        ubifs_err("out of inode numbers");
 152                        make_bad_inode(inode);
 153                        iput(inode);
 154                        return ERR_PTR(-EINVAL);
 155                }
 156                ubifs_warn("running out of inode numbers (current %lu, max %d)",
 157                           (unsigned long)c->highest_inum, INUM_WATERMARK);
 158        }
 159
 160        inode->i_ino = ++c->highest_inum;
 161        /*
 162         * The creation sequence number remains with this inode for its
 163         * lifetime. All nodes for this inode have a greater sequence number,
 164         * and so it is possible to distinguish obsolete nodes belonging to a
 165         * previous incarnation of the same inode number - for example, for the
 166         * purpose of rebuilding the index.
 167         */
 168        ui->creat_sqnum = ++c->max_sqnum;
 169        spin_unlock(&c->cnt_lock);
 170        return inode;
 171}
 172
 173#ifdef CONFIG_UBIFS_FS_DEBUG
 174
 175static int dbg_check_name(const struct ubifs_info *c,
 176                          const struct ubifs_dent_node *dent,
 177                          const struct qstr *nm)
 178{
 179        if (!dbg_is_chk_gen(c))
 180                return 0;
 181        if (le16_to_cpu(dent->nlen) != nm->len)
 182                return -EINVAL;
 183        if (memcmp(dent->name, nm->name, nm->len))
 184                return -EINVAL;
 185        return 0;
 186}
 187
 188#else
 189
 190#define dbg_check_name(c, dent, nm) 0
 191
 192#endif
 193
 194static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
 195                                   struct nameidata *nd)
 196{
 197        int err;
 198        union ubifs_key key;
 199        struct inode *inode = NULL;
 200        struct ubifs_dent_node *dent;
 201        struct ubifs_info *c = dir->i_sb->s_fs_info;
 202
 203        dbg_gen("'%.*s' in dir ino %lu",
 204                dentry->d_name.len, dentry->d_name.name, dir->i_ino);
 205
 206        if (dentry->d_name.len > UBIFS_MAX_NLEN)
 207                return ERR_PTR(-ENAMETOOLONG);
 208
 209        dent = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
 210        if (!dent)
 211                return ERR_PTR(-ENOMEM);
 212
 213        dent_key_init(c, &key, dir->i_ino, &dentry->d_name);
 214
 215        err = ubifs_tnc_lookup_nm(c, &key, dent, &dentry->d_name);
 216        if (err) {
 217                if (err == -ENOENT) {
 218                        dbg_gen("not found");
 219                        goto done;
 220                }
 221                goto out;
 222        }
 223
 224        if (dbg_check_name(c, dent, &dentry->d_name)) {
 225                err = -EINVAL;
 226                goto out;
 227        }
 228
 229        inode = ubifs_iget(dir->i_sb, le64_to_cpu(dent->inum));
 230        if (IS_ERR(inode)) {
 231                /*
 232                 * This should not happen. Probably the file-system needs
 233                 * checking.
 234                 */
 235                err = PTR_ERR(inode);
 236                ubifs_err("dead directory entry '%.*s', error %d",
 237                          dentry->d_name.len, dentry->d_name.name, err);
 238                ubifs_ro_mode(c, err);
 239                goto out;
 240        }
 241
 242done:
 243        kfree(dent);
 244        /*
 245         * Note, d_splice_alias() would be required instead if we supported
 246         * NFS.
 247         */
 248        d_add(dentry, inode);
 249        return NULL;
 250
 251out:
 252        kfree(dent);
 253        return ERR_PTR(err);
 254}
 255
 256static int ubifs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
 257                        struct nameidata *nd)
 258{
 259        struct inode *inode;
 260        struct ubifs_info *c = dir->i_sb->s_fs_info;
 261        int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 262        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
 263                                        .dirtied_ino = 1 };
 264        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 265
 266        /*
 267         * Budget request settings: new inode, new direntry, changing the
 268         * parent directory inode.
 269         */
 270
 271        dbg_gen("dent '%.*s', mode %#hx in dir ino %lu",
 272                dentry->d_name.len, dentry->d_name.name, mode, dir->i_ino);
 273
 274        err = ubifs_budget_space(c, &req);
 275        if (err)
 276                return err;
 277
 278        inode = ubifs_new_inode(c, dir, mode);
 279        if (IS_ERR(inode)) {
 280                err = PTR_ERR(inode);
 281                goto out_budg;
 282        }
 283
 284        mutex_lock(&dir_ui->ui_mutex);
 285        dir->i_size += sz_change;
 286        dir_ui->ui_size = dir->i_size;
 287        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 288        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
 289        if (err)
 290                goto out_cancel;
 291        mutex_unlock(&dir_ui->ui_mutex);
 292
 293        ubifs_release_budget(c, &req);
 294        insert_inode_hash(inode);
 295        d_instantiate(dentry, inode);
 296        return 0;
 297
 298out_cancel:
 299        dir->i_size -= sz_change;
 300        dir_ui->ui_size = dir->i_size;
 301        mutex_unlock(&dir_ui->ui_mutex);
 302        make_bad_inode(inode);
 303        iput(inode);
 304out_budg:
 305        ubifs_release_budget(c, &req);
 306        ubifs_err("cannot create regular file, error %d", err);
 307        return err;
 308}
 309
 310/**
 311 * vfs_dent_type - get VFS directory entry type.
 312 * @type: UBIFS directory entry type
 313 *
 314 * This function converts UBIFS directory entry type into VFS directory entry
 315 * type.
 316 */
 317static unsigned int vfs_dent_type(uint8_t type)
 318{
 319        switch (type) {
 320        case UBIFS_ITYPE_REG:
 321                return DT_REG;
 322        case UBIFS_ITYPE_DIR:
 323                return DT_DIR;
 324        case UBIFS_ITYPE_LNK:
 325                return DT_LNK;
 326        case UBIFS_ITYPE_BLK:
 327                return DT_BLK;
 328        case UBIFS_ITYPE_CHR:
 329                return DT_CHR;
 330        case UBIFS_ITYPE_FIFO:
 331                return DT_FIFO;
 332        case UBIFS_ITYPE_SOCK:
 333                return DT_SOCK;
 334        default:
 335                BUG();
 336        }
 337        return 0;
 338}
 339
 340/*
 341 * The classical Unix view for directory is that it is a linear array of
 342 * (name, inode number) entries. Linux/VFS assumes this model as well.
 343 * Particularly, 'readdir()' call wants us to return a directory entry offset
 344 * which later may be used to continue 'readdir()'ing the directory or to
 345 * 'seek()' to that specific direntry. Obviously UBIFS does not really fit this
 346 * model because directory entries are identified by keys, which may collide.
 347 *
 348 * UBIFS uses directory entry hash value for directory offsets, so
 349 * 'seekdir()'/'telldir()' may not always work because of possible key
 350 * collisions. But UBIFS guarantees that consecutive 'readdir()' calls work
 351 * properly by means of saving full directory entry name in the private field
 352 * of the file description object.
 353 *
 354 * This means that UBIFS cannot support NFS which requires full
 355 * 'seekdir()'/'telldir()' support.
 356 */
 357static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir)
 358{
 359        int err, over = 0;
 360        struct qstr nm;
 361        union ubifs_key key;
 362        struct ubifs_dent_node *dent;
 363        struct inode *dir = file->f_path.dentry->d_inode;
 364        struct ubifs_info *c = dir->i_sb->s_fs_info;
 365
 366        dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, file->f_pos);
 367
 368        if (file->f_pos > UBIFS_S_KEY_HASH_MASK || file->f_pos == 2)
 369                /*
 370                 * The directory was seek'ed to a senseless position or there
 371                 * are no more entries.
 372                 */
 373                return 0;
 374
 375        /* File positions 0 and 1 correspond to "." and ".." */
 376        if (file->f_pos == 0) {
 377                ubifs_assert(!file->private_data);
 378                over = filldir(dirent, ".", 1, 0, dir->i_ino, DT_DIR);
 379                if (over)
 380                        return 0;
 381                file->f_pos = 1;
 382        }
 383
 384        if (file->f_pos == 1) {
 385                ubifs_assert(!file->private_data);
 386                over = filldir(dirent, "..", 2, 1,
 387                               parent_ino(file->f_path.dentry), DT_DIR);
 388                if (over)
 389                        return 0;
 390
 391                /* Find the first entry in TNC and save it */
 392                lowest_dent_key(c, &key, dir->i_ino);
 393                nm.name = NULL;
 394                dent = ubifs_tnc_next_ent(c, &key, &nm);
 395                if (IS_ERR(dent)) {
 396                        err = PTR_ERR(dent);
 397                        goto out;
 398                }
 399
 400                file->f_pos = key_hash_flash(c, &dent->key);
 401                file->private_data = dent;
 402        }
 403
 404        dent = file->private_data;
 405        if (!dent) {
 406                /*
 407                 * The directory was seek'ed to and is now readdir'ed.
 408                 * Find the entry corresponding to @file->f_pos or the
 409                 * closest one.
 410                 */
 411                dent_key_init_hash(c, &key, dir->i_ino, file->f_pos);
 412                nm.name = NULL;
 413                dent = ubifs_tnc_next_ent(c, &key, &nm);
 414                if (IS_ERR(dent)) {
 415                        err = PTR_ERR(dent);
 416                        goto out;
 417                }
 418                file->f_pos = key_hash_flash(c, &dent->key);
 419                file->private_data = dent;
 420        }
 421
 422        while (1) {
 423                dbg_gen("feed '%s', ino %llu, new f_pos %#x",
 424                        dent->name, (unsigned long long)le64_to_cpu(dent->inum),
 425                        key_hash_flash(c, &dent->key));
 426                ubifs_assert(le64_to_cpu(dent->ch.sqnum) >
 427                             ubifs_inode(dir)->creat_sqnum);
 428
 429                nm.len = le16_to_cpu(dent->nlen);
 430                over = filldir(dirent, dent->name, nm.len, file->f_pos,
 431                               le64_to_cpu(dent->inum),
 432                               vfs_dent_type(dent->type));
 433                if (over)
 434                        return 0;
 435
 436                /* Switch to the next entry */
 437                key_read(c, &dent->key, &key);
 438                nm.name = dent->name;
 439                dent = ubifs_tnc_next_ent(c, &key, &nm);
 440                if (IS_ERR(dent)) {
 441                        err = PTR_ERR(dent);
 442                        goto out;
 443                }
 444
 445                kfree(file->private_data);
 446                file->f_pos = key_hash_flash(c, &dent->key);
 447                file->private_data = dent;
 448                cond_resched();
 449        }
 450
 451out:
 452        if (err != -ENOENT) {
 453                ubifs_err("cannot find next direntry, error %d", err);
 454                return err;
 455        }
 456
 457        kfree(file->private_data);
 458        file->private_data = NULL;
 459        file->f_pos = 2;
 460        return 0;
 461}
 462
 463/* If a directory is seeked, we have to free saved readdir() state */
 464static loff_t ubifs_dir_llseek(struct file *file, loff_t offset, int origin)
 465{
 466        kfree(file->private_data);
 467        file->private_data = NULL;
 468        return generic_file_llseek(file, offset, origin);
 469}
 470
 471/* Free saved readdir() state when the directory is closed */
 472static int ubifs_dir_release(struct inode *dir, struct file *file)
 473{
 474        kfree(file->private_data);
 475        file->private_data = NULL;
 476        return 0;
 477}
 478
 479/**
 480 * lock_2_inodes - a wrapper for locking two UBIFS inodes.
 481 * @inode1: first inode
 482 * @inode2: second inode
 483 *
 484 * We do not implement any tricks to guarantee strict lock ordering, because
 485 * VFS has already done it for us on the @i_mutex. So this is just a simple
 486 * wrapper function.
 487 */
 488static void lock_2_inodes(struct inode *inode1, struct inode *inode2)
 489{
 490        mutex_lock_nested(&ubifs_inode(inode1)->ui_mutex, WB_MUTEX_1);
 491        mutex_lock_nested(&ubifs_inode(inode2)->ui_mutex, WB_MUTEX_2);
 492}
 493
 494/**
 495 * unlock_2_inodes - a wrapper for unlocking two UBIFS inodes.
 496 * @inode1: first inode
 497 * @inode2: second inode
 498 */
 499static void unlock_2_inodes(struct inode *inode1, struct inode *inode2)
 500{
 501        mutex_unlock(&ubifs_inode(inode2)->ui_mutex);
 502        mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
 503}
 504
 505static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
 506                      struct dentry *dentry)
 507{
 508        struct ubifs_info *c = dir->i_sb->s_fs_info;
 509        struct inode *inode = old_dentry->d_inode;
 510        struct ubifs_inode *ui = ubifs_inode(inode);
 511        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 512        int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 513        struct ubifs_budget_req req = { .new_dent = 1, .dirtied_ino = 2,
 514                                .dirtied_ino_d = ALIGN(ui->data_len, 8) };
 515
 516        /*
 517         * Budget request settings: new direntry, changing the target inode,
 518         * changing the parent inode.
 519         */
 520
 521        dbg_gen("dent '%.*s' to ino %lu (nlink %d) in dir ino %lu",
 522                dentry->d_name.len, dentry->d_name.name, inode->i_ino,
 523                inode->i_nlink, dir->i_ino);
 524        ubifs_assert(mutex_is_locked(&dir->i_mutex));
 525        ubifs_assert(mutex_is_locked(&inode->i_mutex));
 526
 527        err = dbg_check_synced_i_size(c, inode);
 528        if (err)
 529                return err;
 530
 531        err = ubifs_budget_space(c, &req);
 532        if (err)
 533                return err;
 534
 535        lock_2_inodes(dir, inode);
 536        inc_nlink(inode);
 537        ihold(inode);
 538        inode->i_ctime = ubifs_current_time(inode);
 539        dir->i_size += sz_change;
 540        dir_ui->ui_size = dir->i_size;
 541        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 542        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
 543        if (err)
 544                goto out_cancel;
 545        unlock_2_inodes(dir, inode);
 546
 547        ubifs_release_budget(c, &req);
 548        d_instantiate(dentry, inode);
 549        return 0;
 550
 551out_cancel:
 552        dir->i_size -= sz_change;
 553        dir_ui->ui_size = dir->i_size;
 554        drop_nlink(inode);
 555        unlock_2_inodes(dir, inode);
 556        ubifs_release_budget(c, &req);
 557        iput(inode);
 558        return err;
 559}
 560
 561static int ubifs_unlink(struct inode *dir, struct dentry *dentry)
 562{
 563        struct ubifs_info *c = dir->i_sb->s_fs_info;
 564        struct inode *inode = dentry->d_inode;
 565        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 566        int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 567        int err, budgeted = 1;
 568        struct ubifs_budget_req req = { .mod_dent = 1, .dirtied_ino = 2 };
 569        unsigned int saved_nlink = inode->i_nlink;
 570
 571        /*
 572         * Budget request settings: deletion direntry, deletion inode (+1 for
 573         * @dirtied_ino), changing the parent directory inode. If budgeting
 574         * fails, go ahead anyway because we have extra space reserved for
 575         * deletions.
 576         */
 577
 578        dbg_gen("dent '%.*s' from ino %lu (nlink %d) in dir ino %lu",
 579                dentry->d_name.len, dentry->d_name.name, inode->i_ino,
 580                inode->i_nlink, dir->i_ino);
 581        ubifs_assert(mutex_is_locked(&dir->i_mutex));
 582        ubifs_assert(mutex_is_locked(&inode->i_mutex));
 583        err = dbg_check_synced_i_size(c, inode);
 584        if (err)
 585                return err;
 586
 587        err = ubifs_budget_space(c, &req);
 588        if (err) {
 589                if (err != -ENOSPC)
 590                        return err;
 591                budgeted = 0;
 592        }
 593
 594        lock_2_inodes(dir, inode);
 595        inode->i_ctime = ubifs_current_time(dir);
 596        drop_nlink(inode);
 597        dir->i_size -= sz_change;
 598        dir_ui->ui_size = dir->i_size;
 599        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 600        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 1, 0);
 601        if (err)
 602                goto out_cancel;
 603        unlock_2_inodes(dir, inode);
 604
 605        if (budgeted)
 606                ubifs_release_budget(c, &req);
 607        else {
 608                /* We've deleted something - clean the "no space" flags */
 609                c->bi.nospace = c->bi.nospace_rp = 0;
 610                smp_wmb();
 611        }
 612        return 0;
 613
 614out_cancel:
 615        dir->i_size += sz_change;
 616        dir_ui->ui_size = dir->i_size;
 617        set_nlink(inode, saved_nlink);
 618        unlock_2_inodes(dir, inode);
 619        if (budgeted)
 620                ubifs_release_budget(c, &req);
 621        return err;
 622}
 623
 624/**
 625 * check_dir_empty - check if a directory is empty or not.
 626 * @c: UBIFS file-system description object
 627 * @dir: VFS inode object of the directory to check
 628 *
 629 * This function checks if directory @dir is empty. Returns zero if the
 630 * directory is empty, %-ENOTEMPTY if it is not, and other negative error codes
 631 * in case of of errors.
 632 */
 633static int check_dir_empty(struct ubifs_info *c, struct inode *dir)
 634{
 635        struct qstr nm = { .name = NULL };
 636        struct ubifs_dent_node *dent;
 637        union ubifs_key key;
 638        int err;
 639
 640        lowest_dent_key(c, &key, dir->i_ino);
 641        dent = ubifs_tnc_next_ent(c, &key, &nm);
 642        if (IS_ERR(dent)) {
 643                err = PTR_ERR(dent);
 644                if (err == -ENOENT)
 645                        err = 0;
 646        } else {
 647                kfree(dent);
 648                err = -ENOTEMPTY;
 649        }
 650        return err;
 651}
 652
 653static int ubifs_rmdir(struct inode *dir, struct dentry *dentry)
 654{
 655        struct ubifs_info *c = dir->i_sb->s_fs_info;
 656        struct inode *inode = dentry->d_inode;
 657        int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 658        int err, budgeted = 1;
 659        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 660        struct ubifs_budget_req req = { .mod_dent = 1, .dirtied_ino = 2 };
 661
 662        /*
 663         * Budget request settings: deletion direntry, deletion inode and
 664         * changing the parent inode. If budgeting fails, go ahead anyway
 665         * because we have extra space reserved for deletions.
 666         */
 667
 668        dbg_gen("directory '%.*s', ino %lu in dir ino %lu", dentry->d_name.len,
 669                dentry->d_name.name, inode->i_ino, dir->i_ino);
 670        ubifs_assert(mutex_is_locked(&dir->i_mutex));
 671        ubifs_assert(mutex_is_locked(&inode->i_mutex));
 672        err = check_dir_empty(c, dentry->d_inode);
 673        if (err)
 674                return err;
 675
 676        err = ubifs_budget_space(c, &req);
 677        if (err) {
 678                if (err != -ENOSPC)
 679                        return err;
 680                budgeted = 0;
 681        }
 682
 683        lock_2_inodes(dir, inode);
 684        inode->i_ctime = ubifs_current_time(dir);
 685        clear_nlink(inode);
 686        drop_nlink(dir);
 687        dir->i_size -= sz_change;
 688        dir_ui->ui_size = dir->i_size;
 689        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 690        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 1, 0);
 691        if (err)
 692                goto out_cancel;
 693        unlock_2_inodes(dir, inode);
 694
 695        if (budgeted)
 696                ubifs_release_budget(c, &req);
 697        else {
 698                /* We've deleted something - clean the "no space" flags */
 699                c->bi.nospace = c->bi.nospace_rp = 0;
 700                smp_wmb();
 701        }
 702        return 0;
 703
 704out_cancel:
 705        dir->i_size += sz_change;
 706        dir_ui->ui_size = dir->i_size;
 707        inc_nlink(dir);
 708        set_nlink(inode, 2);
 709        unlock_2_inodes(dir, inode);
 710        if (budgeted)
 711                ubifs_release_budget(c, &req);
 712        return err;
 713}
 714
 715static int ubifs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 716{
 717        struct inode *inode;
 718        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 719        struct ubifs_info *c = dir->i_sb->s_fs_info;
 720        int err, sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 721        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1 };
 722
 723        /*
 724         * Budget request settings: new inode, new direntry and changing parent
 725         * directory inode.
 726         */
 727
 728        dbg_gen("dent '%.*s', mode %#hx in dir ino %lu",
 729                dentry->d_name.len, dentry->d_name.name, mode, dir->i_ino);
 730
 731        err = ubifs_budget_space(c, &req);
 732        if (err)
 733                return err;
 734
 735        inode = ubifs_new_inode(c, dir, S_IFDIR | mode);
 736        if (IS_ERR(inode)) {
 737                err = PTR_ERR(inode);
 738                goto out_budg;
 739        }
 740
 741        mutex_lock(&dir_ui->ui_mutex);
 742        insert_inode_hash(inode);
 743        inc_nlink(inode);
 744        inc_nlink(dir);
 745        dir->i_size += sz_change;
 746        dir_ui->ui_size = dir->i_size;
 747        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 748        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
 749        if (err) {
 750                ubifs_err("cannot create directory, error %d", err);
 751                goto out_cancel;
 752        }
 753        mutex_unlock(&dir_ui->ui_mutex);
 754
 755        ubifs_release_budget(c, &req);
 756        d_instantiate(dentry, inode);
 757        return 0;
 758
 759out_cancel:
 760        dir->i_size -= sz_change;
 761        dir_ui->ui_size = dir->i_size;
 762        drop_nlink(dir);
 763        mutex_unlock(&dir_ui->ui_mutex);
 764        make_bad_inode(inode);
 765        iput(inode);
 766out_budg:
 767        ubifs_release_budget(c, &req);
 768        return err;
 769}
 770
 771static int ubifs_mknod(struct inode *dir, struct dentry *dentry,
 772                       umode_t mode, dev_t rdev)
 773{
 774        struct inode *inode;
 775        struct ubifs_inode *ui;
 776        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 777        struct ubifs_info *c = dir->i_sb->s_fs_info;
 778        union ubifs_dev_desc *dev = NULL;
 779        int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 780        int err, devlen = 0;
 781        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
 782                                        .new_ino_d = ALIGN(devlen, 8),
 783                                        .dirtied_ino = 1 };
 784
 785        /*
 786         * Budget request settings: new inode, new direntry and changing parent
 787         * directory inode.
 788         */
 789
 790        dbg_gen("dent '%.*s' in dir ino %lu",
 791                dentry->d_name.len, dentry->d_name.name, dir->i_ino);
 792
 793        if (!new_valid_dev(rdev))
 794                return -EINVAL;
 795
 796        if (S_ISBLK(mode) || S_ISCHR(mode)) {
 797                dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
 798                if (!dev)
 799                        return -ENOMEM;
 800                devlen = ubifs_encode_dev(dev, rdev);
 801        }
 802
 803        err = ubifs_budget_space(c, &req);
 804        if (err) {
 805                kfree(dev);
 806                return err;
 807        }
 808
 809        inode = ubifs_new_inode(c, dir, mode);
 810        if (IS_ERR(inode)) {
 811                kfree(dev);
 812                err = PTR_ERR(inode);
 813                goto out_budg;
 814        }
 815
 816        init_special_inode(inode, inode->i_mode, rdev);
 817        inode->i_size = ubifs_inode(inode)->ui_size = devlen;
 818        ui = ubifs_inode(inode);
 819        ui->data = dev;
 820        ui->data_len = devlen;
 821
 822        mutex_lock(&dir_ui->ui_mutex);
 823        dir->i_size += sz_change;
 824        dir_ui->ui_size = dir->i_size;
 825        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 826        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
 827        if (err)
 828                goto out_cancel;
 829        mutex_unlock(&dir_ui->ui_mutex);
 830
 831        ubifs_release_budget(c, &req);
 832        insert_inode_hash(inode);
 833        d_instantiate(dentry, inode);
 834        return 0;
 835
 836out_cancel:
 837        dir->i_size -= sz_change;
 838        dir_ui->ui_size = dir->i_size;
 839        mutex_unlock(&dir_ui->ui_mutex);
 840        make_bad_inode(inode);
 841        iput(inode);
 842out_budg:
 843        ubifs_release_budget(c, &req);
 844        return err;
 845}
 846
 847static int ubifs_symlink(struct inode *dir, struct dentry *dentry,
 848                         const char *symname)
 849{
 850        struct inode *inode;
 851        struct ubifs_inode *ui;
 852        struct ubifs_inode *dir_ui = ubifs_inode(dir);
 853        struct ubifs_info *c = dir->i_sb->s_fs_info;
 854        int err, len = strlen(symname);
 855        int sz_change = CALC_DENT_SIZE(dentry->d_name.len);
 856        struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
 857                                        .new_ino_d = ALIGN(len, 8),
 858                                        .dirtied_ino = 1 };
 859
 860        /*
 861         * Budget request settings: new inode, new direntry and changing parent
 862         * directory inode.
 863         */
 864
 865        dbg_gen("dent '%.*s', target '%s' in dir ino %lu", dentry->d_name.len,
 866                dentry->d_name.name, symname, dir->i_ino);
 867
 868        if (len > UBIFS_MAX_INO_DATA)
 869                return -ENAMETOOLONG;
 870
 871        err = ubifs_budget_space(c, &req);
 872        if (err)
 873                return err;
 874
 875        inode = ubifs_new_inode(c, dir, S_IFLNK | S_IRWXUGO);
 876        if (IS_ERR(inode)) {
 877                err = PTR_ERR(inode);
 878                goto out_budg;
 879        }
 880
 881        ui = ubifs_inode(inode);
 882        ui->data = kmalloc(len + 1, GFP_NOFS);
 883        if (!ui->data) {
 884                err = -ENOMEM;
 885                goto out_inode;
 886        }
 887
 888        memcpy(ui->data, symname, len);
 889        ((char *)ui->data)[len] = '\0';
 890        /*
 891         * The terminating zero byte is not written to the flash media and it
 892         * is put just to make later in-memory string processing simpler. Thus,
 893         * data length is @len, not @len + %1.
 894         */
 895        ui->data_len = len;
 896        inode->i_size = ubifs_inode(inode)->ui_size = len;
 897
 898        mutex_lock(&dir_ui->ui_mutex);
 899        dir->i_size += sz_change;
 900        dir_ui->ui_size = dir->i_size;
 901        dir->i_mtime = dir->i_ctime = inode->i_ctime;
 902        err = ubifs_jnl_update(c, dir, &dentry->d_name, inode, 0, 0);
 903        if (err)
 904                goto out_cancel;
 905        mutex_unlock(&dir_ui->ui_mutex);
 906
 907        ubifs_release_budget(c, &req);
 908        insert_inode_hash(inode);
 909        d_instantiate(dentry, inode);
 910        return 0;
 911
 912out_cancel:
 913        dir->i_size -= sz_change;
 914        dir_ui->ui_size = dir->i_size;
 915        mutex_unlock(&dir_ui->ui_mutex);
 916out_inode:
 917        make_bad_inode(inode);
 918        iput(inode);
 919out_budg:
 920        ubifs_release_budget(c, &req);
 921        return err;
 922}
 923
 924/**
 925 * lock_3_inodes - a wrapper for locking three UBIFS inodes.
 926 * @inode1: first inode
 927 * @inode2: second inode
 928 * @inode3: third inode
 929 *
 930 * This function is used for 'ubifs_rename()' and @inode1 may be the same as
 931 * @inode2 whereas @inode3 may be %NULL.
 932 *
 933 * We do not implement any tricks to guarantee strict lock ordering, because
 934 * VFS has already done it for us on the @i_mutex. So this is just a simple
 935 * wrapper function.
 936 */
 937static void lock_3_inodes(struct inode *inode1, struct inode *inode2,
 938                          struct inode *inode3)
 939{
 940        mutex_lock_nested(&ubifs_inode(inode1)->ui_mutex, WB_MUTEX_1);
 941        if (inode2 != inode1)
 942                mutex_lock_nested(&ubifs_inode(inode2)->ui_mutex, WB_MUTEX_2);
 943        if (inode3)
 944                mutex_lock_nested(&ubifs_inode(inode3)->ui_mutex, WB_MUTEX_3);
 945}
 946
 947/**
 948 * unlock_3_inodes - a wrapper for unlocking three UBIFS inodes for rename.
 949 * @inode1: first inode
 950 * @inode2: second inode
 951 * @inode3: third inode
 952 */
 953static void unlock_3_inodes(struct inode *inode1, struct inode *inode2,
 954                            struct inode *inode3)
 955{
 956        if (inode3)
 957                mutex_unlock(&ubifs_inode(inode3)->ui_mutex);
 958        if (inode1 != inode2)
 959                mutex_unlock(&ubifs_inode(inode2)->ui_mutex);
 960        mutex_unlock(&ubifs_inode(inode1)->ui_mutex);
 961}
 962
 963static int ubifs_rename(struct inode *old_dir, struct dentry *old_dentry,
 964                        struct inode *new_dir, struct dentry *new_dentry)
 965{
 966        struct ubifs_info *c = old_dir->i_sb->s_fs_info;
 967        struct inode *old_inode = old_dentry->d_inode;
 968        struct inode *new_inode = new_dentry->d_inode;
 969        struct ubifs_inode *old_inode_ui = ubifs_inode(old_inode);
 970        int err, release, sync = 0, move = (new_dir != old_dir);
 971        int is_dir = S_ISDIR(old_inode->i_mode);
 972        int unlink = !!new_inode;
 973        int new_sz = CALC_DENT_SIZE(new_dentry->d_name.len);
 974        int old_sz = CALC_DENT_SIZE(old_dentry->d_name.len);
 975        struct ubifs_budget_req req = { .new_dent = 1, .mod_dent = 1,
 976                                        .dirtied_ino = 3 };
 977        struct ubifs_budget_req ino_req = { .dirtied_ino = 1,
 978                        .dirtied_ino_d = ALIGN(old_inode_ui->data_len, 8) };
 979        struct timespec time;
 980        unsigned int saved_nlink;
 981
 982        /*
 983         * Budget request settings: deletion direntry, new direntry, removing
 984         * the old inode, and changing old and new parent directory inodes.
 985         *
 986         * However, this operation also marks the target inode as dirty and
 987         * does not write it, so we allocate budget for the target inode
 988         * separately.
 989         */
 990
 991        dbg_gen("dent '%.*s' ino %lu in dir ino %lu to dent '%.*s' in "
 992                "dir ino %lu", old_dentry->d_name.len, old_dentry->d_name.name,
 993                old_inode->i_ino, old_dir->i_ino, new_dentry->d_name.len,
 994                new_dentry->d_name.name, new_dir->i_ino);
 995        ubifs_assert(mutex_is_locked(&old_dir->i_mutex));
 996        ubifs_assert(mutex_is_locked(&new_dir->i_mutex));
 997        if (unlink)
 998                ubifs_assert(mutex_is_locked(&new_inode->i_mutex));
 999
1000
1001        if (unlink && is_dir) {
1002                err = check_dir_empty(c, new_inode);
1003                if (err)
1004                        return err;
1005        }
1006
1007        err = ubifs_budget_space(c, &req);
1008        if (err)
1009                return err;
1010        err = ubifs_budget_space(c, &ino_req);
1011        if (err) {
1012                ubifs_release_budget(c, &req);
1013                return err;
1014        }
1015
1016        lock_3_inodes(old_dir, new_dir, new_inode);
1017
1018        /*
1019         * Like most other Unix systems, set the @i_ctime for inodes on a
1020         * rename.
1021         */
1022        time = ubifs_current_time(old_dir);
1023        old_inode->i_ctime = time;
1024
1025        /* We must adjust parent link count when renaming directories */
1026        if (is_dir) {
1027                if (move) {
1028                        /*
1029                         * @old_dir loses a link because we are moving
1030                         * @old_inode to a different directory.
1031                         */
1032                        drop_nlink(old_dir);
1033                        /*
1034                         * @new_dir only gains a link if we are not also
1035                         * overwriting an existing directory.
1036                         */
1037                        if (!unlink)
1038                                inc_nlink(new_dir);
1039                } else {
1040                        /*
1041                         * @old_inode is not moving to a different directory,
1042                         * but @old_dir still loses a link if we are
1043                         * overwriting an existing directory.
1044                         */
1045                        if (unlink)
1046                                drop_nlink(old_dir);
1047                }
1048        }
1049
1050        old_dir->i_size -= old_sz;
1051        ubifs_inode(old_dir)->ui_size = old_dir->i_size;
1052        old_dir->i_mtime = old_dir->i_ctime = time;
1053        new_dir->i_mtime = new_dir->i_ctime = time;
1054
1055        /*
1056         * And finally, if we unlinked a direntry which happened to have the
1057         * same name as the moved direntry, we have to decrement @i_nlink of
1058         * the unlinked inode and change its ctime.
1059         */
1060        if (unlink) {
1061                /*
1062                 * Directories cannot have hard-links, so if this is a
1063                 * directory, just clear @i_nlink.
1064                 */
1065                saved_nlink = new_inode->i_nlink;
1066                if (is_dir)
1067                        clear_nlink(new_inode);
1068                else
1069                        drop_nlink(new_inode);
1070                new_inode->i_ctime = time;
1071        } else {
1072                new_dir->i_size += new_sz;
1073                ubifs_inode(new_dir)->ui_size = new_dir->i_size;
1074        }
1075
1076        /*
1077         * Do not ask 'ubifs_jnl_rename()' to flush write-buffer if @old_inode
1078         * is dirty, because this will be done later on at the end of
1079         * 'ubifs_rename()'.
1080         */
1081        if (IS_SYNC(old_inode)) {
1082                sync = IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir);
1083                if (unlink && IS_SYNC(new_inode))
1084                        sync = 1;
1085        }
1086        err = ubifs_jnl_rename(c, old_dir, old_dentry, new_dir, new_dentry,
1087                               sync);
1088        if (err)
1089                goto out_cancel;
1090
1091        unlock_3_inodes(old_dir, new_dir, new_inode);
1092        ubifs_release_budget(c, &req);
1093
1094        mutex_lock(&old_inode_ui->ui_mutex);
1095        release = old_inode_ui->dirty;
1096        mark_inode_dirty_sync(old_inode);
1097        mutex_unlock(&old_inode_ui->ui_mutex);
1098
1099        if (release)
1100                ubifs_release_budget(c, &ino_req);
1101        if (IS_SYNC(old_inode))
1102                err = old_inode->i_sb->s_op->write_inode(old_inode, NULL);
1103        return err;
1104
1105out_cancel:
1106        if (unlink) {
1107                set_nlink(new_inode, saved_nlink);
1108        } else {
1109                new_dir->i_size -= new_sz;
1110                ubifs_inode(new_dir)->ui_size = new_dir->i_size;
1111        }
1112        old_dir->i_size += old_sz;
1113        ubifs_inode(old_dir)->ui_size = old_dir->i_size;
1114        if (is_dir) {
1115                if (move) {
1116                        inc_nlink(old_dir);
1117                        if (!unlink)
1118                                drop_nlink(new_dir);
1119                } else {
1120                        if (unlink)
1121                                inc_nlink(old_dir);
1122                }
1123        }
1124        unlock_3_inodes(old_dir, new_dir, new_inode);
1125        ubifs_release_budget(c, &ino_req);
1126        ubifs_release_budget(c, &req);
1127        return err;
1128}
1129
1130int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
1131                  struct kstat *stat)
1132{
1133        loff_t size;
1134        struct inode *inode = dentry->d_inode;
1135        struct ubifs_inode *ui = ubifs_inode(inode);
1136
1137        mutex_lock(&ui->ui_mutex);
1138        stat->dev = inode->i_sb->s_dev;
1139        stat->ino = inode->i_ino;
1140        stat->mode = inode->i_mode;
1141        stat->nlink = inode->i_nlink;
1142        stat->uid = inode->i_uid;
1143        stat->gid = inode->i_gid;
1144        stat->rdev = inode->i_rdev;
1145        stat->atime = inode->i_atime;
1146        stat->mtime = inode->i_mtime;
1147        stat->ctime = inode->i_ctime;
1148        stat->blksize = UBIFS_BLOCK_SIZE;
1149        stat->size = ui->ui_size;
1150
1151        /*
1152         * Unfortunately, the 'stat()' system call was designed for block
1153         * device based file systems, and it is not appropriate for UBIFS,
1154         * because UBIFS does not have notion of "block". For example, it is
1155         * difficult to tell how many block a directory takes - it actually
1156         * takes less than 300 bytes, but we have to round it to block size,
1157         * which introduces large mistake. This makes utilities like 'du' to
1158         * report completely senseless numbers. This is the reason why UBIFS
1159         * goes the same way as JFFS2 - it reports zero blocks for everything
1160         * but regular files, which makes more sense than reporting completely
1161         * wrong sizes.
1162         */
1163        if (S_ISREG(inode->i_mode)) {
1164                size = ui->xattr_size;
1165                size += stat->size;
1166                size = ALIGN(size, UBIFS_BLOCK_SIZE);
1167                /*
1168                 * Note, user-space expects 512-byte blocks count irrespectively
1169                 * of what was reported in @stat->size.
1170                 */
1171                stat->blocks = size >> 9;
1172        } else
1173                stat->blocks = 0;
1174        mutex_unlock(&ui->ui_mutex);
1175        return 0;
1176}
1177
1178const struct inode_operations ubifs_dir_inode_operations = {
1179        .lookup      = ubifs_lookup,
1180        .create      = ubifs_create,
1181        .link        = ubifs_link,
1182        .symlink     = ubifs_symlink,
1183        .unlink      = ubifs_unlink,
1184        .mkdir       = ubifs_mkdir,
1185        .rmdir       = ubifs_rmdir,
1186        .mknod       = ubifs_mknod,
1187        .rename      = ubifs_rename,
1188        .setattr     = ubifs_setattr,
1189        .getattr     = ubifs_getattr,
1190#ifdef CONFIG_UBIFS_FS_XATTR
1191        .setxattr    = ubifs_setxattr,
1192        .getxattr    = ubifs_getxattr,
1193        .listxattr   = ubifs_listxattr,
1194        .removexattr = ubifs_removexattr,
1195#endif
1196};
1197
1198const struct file_operations ubifs_dir_operations = {
1199        .llseek         = ubifs_dir_llseek,
1200        .release        = ubifs_dir_release,
1201        .read           = generic_read_dir,
1202        .readdir        = ubifs_readdir,
1203        .fsync          = ubifs_fsync,
1204        .unlocked_ioctl = ubifs_ioctl,
1205#ifdef CONFIG_COMPAT
1206        .compat_ioctl   = ubifs_compat_ioctl,
1207#endif
1208};
1209