linux/fs/ubifs/tnc.c
<<
>>
Prefs
   1/*
   2 * This file is part of UBIFS.
   3 *
   4 * Copyright (C) 2006-2008 Nokia Corporation.
   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: Adrian Hunter
  20 *          Artem Bityutskiy (Битюцкий Артём)
  21 */
  22
  23/*
  24 * This file implements TNC (Tree Node Cache) which caches indexing nodes of
  25 * the UBIFS B-tree.
  26 *
  27 * At the moment the locking rules of the TNC tree are quite simple and
  28 * straightforward. We just have a mutex and lock it when we traverse the
  29 * tree. If a znode is not in memory, we read it from flash while still having
  30 * the mutex locked.
  31 */
  32
  33#include <linux/crc32.h>
  34#include <linux/slab.h>
  35#include "ubifs.h"
  36
  37static int try_read_node(const struct ubifs_info *c, void *buf, int type,
  38                         int len, int lnum, int offs);
  39static int fallible_read_node(struct ubifs_info *c, const union ubifs_key *key,
  40                              struct ubifs_zbranch *zbr, void *node);
  41
  42/*
  43 * Returned codes of 'matches_name()' and 'fallible_matches_name()' functions.
  44 * @NAME_LESS: name corresponding to the first argument is less than second
  45 * @NAME_MATCHES: names match
  46 * @NAME_GREATER: name corresponding to the second argument is greater than
  47 *                first
  48 * @NOT_ON_MEDIA: node referred by zbranch does not exist on the media
  49 *
  50 * These constants were introduce to improve readability.
  51 */
  52enum {
  53        NAME_LESS    = 0,
  54        NAME_MATCHES = 1,
  55        NAME_GREATER = 2,
  56        NOT_ON_MEDIA = 3,
  57};
  58
  59/**
  60 * insert_old_idx - record an index node obsoleted since the last commit start.
  61 * @c: UBIFS file-system description object
  62 * @lnum: LEB number of obsoleted index node
  63 * @offs: offset of obsoleted index node
  64 *
  65 * Returns %0 on success, and a negative error code on failure.
  66 *
  67 * For recovery, there must always be a complete intact version of the index on
  68 * flash at all times. That is called the "old index". It is the index as at the
  69 * time of the last successful commit. Many of the index nodes in the old index
  70 * may be dirty, but they must not be erased until the next successful commit
  71 * (at which point that index becomes the old index).
  72 *
  73 * That means that the garbage collection and the in-the-gaps method of
  74 * committing must be able to determine if an index node is in the old index.
  75 * Most of the old index nodes can be found by looking up the TNC using the
  76 * 'lookup_znode()' function. However, some of the old index nodes may have
  77 * been deleted from the current index or may have been changed so much that
  78 * they cannot be easily found. In those cases, an entry is added to an RB-tree.
  79 * That is what this function does. The RB-tree is ordered by LEB number and
  80 * offset because they uniquely identify the old index node.
  81 */
  82static int insert_old_idx(struct ubifs_info *c, int lnum, int offs)
  83{
  84        struct ubifs_old_idx *old_idx, *o;
  85        struct rb_node **p, *parent = NULL;
  86
  87        old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS);
  88        if (unlikely(!old_idx))
  89                return -ENOMEM;
  90        old_idx->lnum = lnum;
  91        old_idx->offs = offs;
  92
  93        p = &c->old_idx.rb_node;
  94        while (*p) {
  95                parent = *p;
  96                o = rb_entry(parent, struct ubifs_old_idx, rb);
  97                if (lnum < o->lnum)
  98                        p = &(*p)->rb_left;
  99                else if (lnum > o->lnum)
 100                        p = &(*p)->rb_right;
 101                else if (offs < o->offs)
 102                        p = &(*p)->rb_left;
 103                else if (offs > o->offs)
 104                        p = &(*p)->rb_right;
 105                else {
 106                        ubifs_err(c, "old idx added twice!");
 107                        kfree(old_idx);
 108                        return 0;
 109                }
 110        }
 111        rb_link_node(&old_idx->rb, parent, p);
 112        rb_insert_color(&old_idx->rb, &c->old_idx);
 113        return 0;
 114}
 115
 116/**
 117 * insert_old_idx_znode - record a znode obsoleted since last commit start.
 118 * @c: UBIFS file-system description object
 119 * @znode: znode of obsoleted index node
 120 *
 121 * Returns %0 on success, and a negative error code on failure.
 122 */
 123int insert_old_idx_znode(struct ubifs_info *c, struct ubifs_znode *znode)
 124{
 125        if (znode->parent) {
 126                struct ubifs_zbranch *zbr;
 127
 128                zbr = &znode->parent->zbranch[znode->iip];
 129                if (zbr->len)
 130                        return insert_old_idx(c, zbr->lnum, zbr->offs);
 131        } else
 132                if (c->zroot.len)
 133                        return insert_old_idx(c, c->zroot.lnum,
 134                                              c->zroot.offs);
 135        return 0;
 136}
 137
 138/**
 139 * ins_clr_old_idx_znode - record a znode obsoleted since last commit start.
 140 * @c: UBIFS file-system description object
 141 * @znode: znode of obsoleted index node
 142 *
 143 * Returns %0 on success, and a negative error code on failure.
 144 */
 145static int ins_clr_old_idx_znode(struct ubifs_info *c,
 146                                 struct ubifs_znode *znode)
 147{
 148        int err;
 149
 150        if (znode->parent) {
 151                struct ubifs_zbranch *zbr;
 152
 153                zbr = &znode->parent->zbranch[znode->iip];
 154                if (zbr->len) {
 155                        err = insert_old_idx(c, zbr->lnum, zbr->offs);
 156                        if (err)
 157                                return err;
 158                        zbr->lnum = 0;
 159                        zbr->offs = 0;
 160                        zbr->len = 0;
 161                }
 162        } else
 163                if (c->zroot.len) {
 164                        err = insert_old_idx(c, c->zroot.lnum, c->zroot.offs);
 165                        if (err)
 166                                return err;
 167                        c->zroot.lnum = 0;
 168                        c->zroot.offs = 0;
 169                        c->zroot.len = 0;
 170                }
 171        return 0;
 172}
 173
 174/**
 175 * destroy_old_idx - destroy the old_idx RB-tree.
 176 * @c: UBIFS file-system description object
 177 *
 178 * During start commit, the old_idx RB-tree is used to avoid overwriting index
 179 * nodes that were in the index last commit but have since been deleted.  This
 180 * is necessary for recovery i.e. the old index must be kept intact until the
 181 * new index is successfully written.  The old-idx RB-tree is used for the
 182 * in-the-gaps method of writing index nodes and is destroyed every commit.
 183 */
 184void destroy_old_idx(struct ubifs_info *c)
 185{
 186        struct ubifs_old_idx *old_idx, *n;
 187
 188        rbtree_postorder_for_each_entry_safe(old_idx, n, &c->old_idx, rb)
 189                kfree(old_idx);
 190
 191        c->old_idx = RB_ROOT;
 192}
 193
 194/**
 195 * copy_znode - copy a dirty znode.
 196 * @c: UBIFS file-system description object
 197 * @znode: znode to copy
 198 *
 199 * A dirty znode being committed may not be changed, so it is copied.
 200 */
 201static struct ubifs_znode *copy_znode(struct ubifs_info *c,
 202                                      struct ubifs_znode *znode)
 203{
 204        struct ubifs_znode *zn;
 205
 206        zn = kmemdup(znode, c->max_znode_sz, GFP_NOFS);
 207        if (unlikely(!zn))
 208                return ERR_PTR(-ENOMEM);
 209
 210        zn->cnext = NULL;
 211        __set_bit(DIRTY_ZNODE, &zn->flags);
 212        __clear_bit(COW_ZNODE, &zn->flags);
 213
 214        ubifs_assert(!ubifs_zn_obsolete(znode));
 215        __set_bit(OBSOLETE_ZNODE, &znode->flags);
 216
 217        if (znode->level != 0) {
 218                int i;
 219                const int n = zn->child_cnt;
 220
 221                /* The children now have new parent */
 222                for (i = 0; i < n; i++) {
 223                        struct ubifs_zbranch *zbr = &zn->zbranch[i];
 224
 225                        if (zbr->znode)
 226                                zbr->znode->parent = zn;
 227                }
 228        }
 229
 230        atomic_long_inc(&c->dirty_zn_cnt);
 231        return zn;
 232}
 233
 234/**
 235 * add_idx_dirt - add dirt due to a dirty znode.
 236 * @c: UBIFS file-system description object
 237 * @lnum: LEB number of index node
 238 * @dirt: size of index node
 239 *
 240 * This function updates lprops dirty space and the new size of the index.
 241 */
 242static int add_idx_dirt(struct ubifs_info *c, int lnum, int dirt)
 243{
 244        c->calc_idx_sz -= ALIGN(dirt, 8);
 245        return ubifs_add_dirt(c, lnum, dirt);
 246}
 247
 248/**
 249 * dirty_cow_znode - ensure a znode is not being committed.
 250 * @c: UBIFS file-system description object
 251 * @zbr: branch of znode to check
 252 *
 253 * Returns dirtied znode on success or negative error code on failure.
 254 */
 255static struct ubifs_znode *dirty_cow_znode(struct ubifs_info *c,
 256                                           struct ubifs_zbranch *zbr)
 257{
 258        struct ubifs_znode *znode = zbr->znode;
 259        struct ubifs_znode *zn;
 260        int err;
 261
 262        if (!ubifs_zn_cow(znode)) {
 263                /* znode is not being committed */
 264                if (!test_and_set_bit(DIRTY_ZNODE, &znode->flags)) {
 265                        atomic_long_inc(&c->dirty_zn_cnt);
 266                        atomic_long_dec(&c->clean_zn_cnt);
 267                        atomic_long_dec(&ubifs_clean_zn_cnt);
 268                        err = add_idx_dirt(c, zbr->lnum, zbr->len);
 269                        if (unlikely(err))
 270                                return ERR_PTR(err);
 271                }
 272                return znode;
 273        }
 274
 275        zn = copy_znode(c, znode);
 276        if (IS_ERR(zn))
 277                return zn;
 278
 279        if (zbr->len) {
 280                err = insert_old_idx(c, zbr->lnum, zbr->offs);
 281                if (unlikely(err))
 282                        return ERR_PTR(err);
 283                err = add_idx_dirt(c, zbr->lnum, zbr->len);
 284        } else
 285                err = 0;
 286
 287        zbr->znode = zn;
 288        zbr->lnum = 0;
 289        zbr->offs = 0;
 290        zbr->len = 0;
 291
 292        if (unlikely(err))
 293                return ERR_PTR(err);
 294        return zn;
 295}
 296
 297/**
 298 * lnc_add - add a leaf node to the leaf node cache.
 299 * @c: UBIFS file-system description object
 300 * @zbr: zbranch of leaf node
 301 * @node: leaf node
 302 *
 303 * Leaf nodes are non-index nodes directory entry nodes or data nodes. The
 304 * purpose of the leaf node cache is to save re-reading the same leaf node over
 305 * and over again. Most things are cached by VFS, however the file system must
 306 * cache directory entries for readdir and for resolving hash collisions. The
 307 * present implementation of the leaf node cache is extremely simple, and
 308 * allows for error returns that are not used but that may be needed if a more
 309 * complex implementation is created.
 310 *
 311 * Note, this function does not add the @node object to LNC directly, but
 312 * allocates a copy of the object and adds the copy to LNC. The reason for this
 313 * is that @node has been allocated outside of the TNC subsystem and will be
 314 * used with @c->tnc_mutex unlock upon return from the TNC subsystem. But LNC
 315 * may be changed at any time, e.g. freed by the shrinker.
 316 */
 317static int lnc_add(struct ubifs_info *c, struct ubifs_zbranch *zbr,
 318                   const void *node)
 319{
 320        int err;
 321        void *lnc_node;
 322        const struct ubifs_dent_node *dent = node;
 323
 324        ubifs_assert(!zbr->leaf);
 325        ubifs_assert(zbr->len != 0);
 326        ubifs_assert(is_hash_key(c, &zbr->key));
 327
 328        err = ubifs_validate_entry(c, dent);
 329        if (err) {
 330                dump_stack();
 331                ubifs_dump_node(c, dent);
 332                return err;
 333        }
 334
 335        lnc_node = kmemdup(node, zbr->len, GFP_NOFS);
 336        if (!lnc_node)
 337                /* We don't have to have the cache, so no error */
 338                return 0;
 339
 340        zbr->leaf = lnc_node;
 341        return 0;
 342}
 343
 344 /**
 345 * lnc_add_directly - add a leaf node to the leaf-node-cache.
 346 * @c: UBIFS file-system description object
 347 * @zbr: zbranch of leaf node
 348 * @node: leaf node
 349 *
 350 * This function is similar to 'lnc_add()', but it does not create a copy of
 351 * @node but inserts @node to TNC directly.
 352 */
 353static int lnc_add_directly(struct ubifs_info *c, struct ubifs_zbranch *zbr,
 354                            void *node)
 355{
 356        int err;
 357
 358        ubifs_assert(!zbr->leaf);
 359        ubifs_assert(zbr->len != 0);
 360
 361        err = ubifs_validate_entry(c, node);
 362        if (err) {
 363                dump_stack();
 364                ubifs_dump_node(c, node);
 365                return err;
 366        }
 367
 368        zbr->leaf = node;
 369        return 0;
 370}
 371
 372/**
 373 * lnc_free - remove a leaf node from the leaf node cache.
 374 * @zbr: zbranch of leaf node
 375 * @node: leaf node
 376 */
 377static void lnc_free(struct ubifs_zbranch *zbr)
 378{
 379        if (!zbr->leaf)
 380                return;
 381        kfree(zbr->leaf);
 382        zbr->leaf = NULL;
 383}
 384
 385/**
 386 * tnc_read_hashed_node - read a "hashed" leaf node.
 387 * @c: UBIFS file-system description object
 388 * @zbr: key and position of the node
 389 * @node: node is returned here
 390 *
 391 * This function reads a "hashed" node defined by @zbr from the leaf node cache
 392 * (in it is there) or from the hash media, in which case the node is also
 393 * added to LNC. Returns zero in case of success or a negative negative error
 394 * code in case of failure.
 395 */
 396static int tnc_read_hashed_node(struct ubifs_info *c, struct ubifs_zbranch *zbr,
 397                                void *node)
 398{
 399        int err;
 400
 401        ubifs_assert(is_hash_key(c, &zbr->key));
 402
 403        if (zbr->leaf) {
 404                /* Read from the leaf node cache */
 405                ubifs_assert(zbr->len != 0);
 406                memcpy(node, zbr->leaf, zbr->len);
 407                return 0;
 408        }
 409
 410        if (c->replaying) {
 411                err = fallible_read_node(c, &zbr->key, zbr, node);
 412                /*
 413                 * When the node was not found, return -ENOENT, 0 otherwise.
 414                 * Negative return codes stay as-is.
 415                 */
 416                if (err == 0)
 417                        err = -ENOENT;
 418                else if (err == 1)
 419                        err = 0;
 420        } else {
 421                err = ubifs_tnc_read_node(c, zbr, node);
 422        }
 423        if (err)
 424                return err;
 425
 426        /* Add the node to the leaf node cache */
 427        err = lnc_add(c, zbr, node);
 428        return err;
 429}
 430
 431/**
 432 * try_read_node - read a node if it is a node.
 433 * @c: UBIFS file-system description object
 434 * @buf: buffer to read to
 435 * @type: node type
 436 * @len: node length (not aligned)
 437 * @lnum: LEB number of node to read
 438 * @offs: offset of node to read
 439 *
 440 * This function tries to read a node of known type and length, checks it and
 441 * stores it in @buf. This function returns %1 if a node is present and %0 if
 442 * a node is not present. A negative error code is returned for I/O errors.
 443 * This function performs that same function as ubifs_read_node except that
 444 * it does not require that there is actually a node present and instead
 445 * the return code indicates if a node was read.
 446 *
 447 * Note, this function does not check CRC of data nodes if @c->no_chk_data_crc
 448 * is true (it is controlled by corresponding mount option). However, if
 449 * @c->mounting or @c->remounting_rw is true (we are mounting or re-mounting to
 450 * R/W mode), @c->no_chk_data_crc is ignored and CRC is checked. This is
 451 * because during mounting or re-mounting from R/O mode to R/W mode we may read
 452 * journal nodes (when replying the journal or doing the recovery) and the
 453 * journal nodes may potentially be corrupted, so checking is required.
 454 */
 455static int try_read_node(const struct ubifs_info *c, void *buf, int type,
 456                         int len, int lnum, int offs)
 457{
 458        int err, node_len;
 459        struct ubifs_ch *ch = buf;
 460        uint32_t crc, node_crc;
 461
 462        dbg_io("LEB %d:%d, %s, length %d", lnum, offs, dbg_ntype(type), len);
 463
 464        err = ubifs_leb_read(c, lnum, buf, offs, len, 1);
 465        if (err) {
 466                ubifs_err(c, "cannot read node type %d from LEB %d:%d, error %d",
 467                          type, lnum, offs, err);
 468                return err;
 469        }
 470
 471        if (le32_to_cpu(ch->magic) != UBIFS_NODE_MAGIC)
 472                return 0;
 473
 474        if (ch->node_type != type)
 475                return 0;
 476
 477        node_len = le32_to_cpu(ch->len);
 478        if (node_len != len)
 479                return 0;
 480
 481        if (type == UBIFS_DATA_NODE && c->no_chk_data_crc && !c->mounting &&
 482            !c->remounting_rw)
 483                return 1;
 484
 485        crc = crc32(UBIFS_CRC32_INIT, buf + 8, node_len - 8);
 486        node_crc = le32_to_cpu(ch->crc);
 487        if (crc != node_crc)
 488                return 0;
 489
 490        return 1;
 491}
 492
 493/**
 494 * fallible_read_node - try to read a leaf node.
 495 * @c: UBIFS file-system description object
 496 * @key:  key of node to read
 497 * @zbr:  position of node
 498 * @node: node returned
 499 *
 500 * This function tries to read a node and returns %1 if the node is read, %0
 501 * if the node is not present, and a negative error code in the case of error.
 502 */
 503static int fallible_read_node(struct ubifs_info *c, const union ubifs_key *key,
 504                              struct ubifs_zbranch *zbr, void *node)
 505{
 506        int ret;
 507
 508        dbg_tnck(key, "LEB %d:%d, key ", zbr->lnum, zbr->offs);
 509
 510        ret = try_read_node(c, node, key_type(c, key), zbr->len, zbr->lnum,
 511                            zbr->offs);
 512        if (ret == 1) {
 513                union ubifs_key node_key;
 514                struct ubifs_dent_node *dent = node;
 515
 516                /* All nodes have key in the same place */
 517                key_read(c, &dent->key, &node_key);
 518                if (keys_cmp(c, key, &node_key) != 0)
 519                        ret = 0;
 520        }
 521        if (ret == 0 && c->replaying)
 522                dbg_mntk(key, "dangling branch LEB %d:%d len %d, key ",
 523                        zbr->lnum, zbr->offs, zbr->len);
 524        return ret;
 525}
 526
 527/**
 528 * matches_name - determine if a direntry or xattr entry matches a given name.
 529 * @c: UBIFS file-system description object
 530 * @zbr: zbranch of dent
 531 * @nm: name to match
 532 *
 533 * This function checks if xentry/direntry referred by zbranch @zbr matches name
 534 * @nm. Returns %NAME_MATCHES if it does, %NAME_LESS if the name referred by
 535 * @zbr is less than @nm, and %NAME_GREATER if it is greater than @nm. In case
 536 * of failure, a negative error code is returned.
 537 */
 538static int matches_name(struct ubifs_info *c, struct ubifs_zbranch *zbr,
 539                        const struct fscrypt_name *nm)
 540{
 541        struct ubifs_dent_node *dent;
 542        int nlen, err;
 543
 544        /* If possible, match against the dent in the leaf node cache */
 545        if (!zbr->leaf) {
 546                dent = kmalloc(zbr->len, GFP_NOFS);
 547                if (!dent)
 548                        return -ENOMEM;
 549
 550                err = ubifs_tnc_read_node(c, zbr, dent);
 551                if (err)
 552                        goto out_free;
 553
 554                /* Add the node to the leaf node cache */
 555                err = lnc_add_directly(c, zbr, dent);
 556                if (err)
 557                        goto out_free;
 558        } else
 559                dent = zbr->leaf;
 560
 561        nlen = le16_to_cpu(dent->nlen);
 562        err = memcmp(dent->name, fname_name(nm), min_t(int, nlen, fname_len(nm)));
 563        if (err == 0) {
 564                if (nlen == fname_len(nm))
 565                        return NAME_MATCHES;
 566                else if (nlen < fname_len(nm))
 567                        return NAME_LESS;
 568                else
 569                        return NAME_GREATER;
 570        } else if (err < 0)
 571                return NAME_LESS;
 572        else
 573                return NAME_GREATER;
 574
 575out_free:
 576        kfree(dent);
 577        return err;
 578}
 579
 580/**
 581 * get_znode - get a TNC znode that may not be loaded yet.
 582 * @c: UBIFS file-system description object
 583 * @znode: parent znode
 584 * @n: znode branch slot number
 585 *
 586 * This function returns the znode or a negative error code.
 587 */
 588static struct ubifs_znode *get_znode(struct ubifs_info *c,
 589                                     struct ubifs_znode *znode, int n)
 590{
 591        struct ubifs_zbranch *zbr;
 592
 593        zbr = &znode->zbranch[n];
 594        if (zbr->znode)
 595                znode = zbr->znode;
 596        else
 597                znode = ubifs_load_znode(c, zbr, znode, n);
 598        return znode;
 599}
 600
 601/**
 602 * tnc_next - find next TNC entry.
 603 * @c: UBIFS file-system description object
 604 * @zn: znode is passed and returned here
 605 * @n: znode branch slot number is passed and returned here
 606 *
 607 * This function returns %0 if the next TNC entry is found, %-ENOENT if there is
 608 * no next entry, or a negative error code otherwise.
 609 */
 610static int tnc_next(struct ubifs_info *c, struct ubifs_znode **zn, int *n)
 611{
 612        struct ubifs_znode *znode = *zn;
 613        int nn = *n;
 614
 615        nn += 1;
 616        if (nn < znode->child_cnt) {
 617                *n = nn;
 618                return 0;
 619        }
 620        while (1) {
 621                struct ubifs_znode *zp;
 622
 623                zp = znode->parent;
 624                if (!zp)
 625                        return -ENOENT;
 626                nn = znode->iip + 1;
 627                znode = zp;
 628                if (nn < znode->child_cnt) {
 629                        znode = get_znode(c, znode, nn);
 630                        if (IS_ERR(znode))
 631                                return PTR_ERR(znode);
 632                        while (znode->level != 0) {
 633                                znode = get_znode(c, znode, 0);
 634                                if (IS_ERR(znode))
 635                                        return PTR_ERR(znode);
 636                        }
 637                        nn = 0;
 638                        break;
 639                }
 640        }
 641        *zn = znode;
 642        *n = nn;
 643        return 0;
 644}
 645
 646/**
 647 * tnc_prev - find previous TNC entry.
 648 * @c: UBIFS file-system description object
 649 * @zn: znode is returned here
 650 * @n: znode branch slot number is passed and returned here
 651 *
 652 * This function returns %0 if the previous TNC entry is found, %-ENOENT if
 653 * there is no next entry, or a negative error code otherwise.
 654 */
 655static int tnc_prev(struct ubifs_info *c, struct ubifs_znode **zn, int *n)
 656{
 657        struct ubifs_znode *znode = *zn;
 658        int nn = *n;
 659
 660        if (nn > 0) {
 661                *n = nn - 1;
 662                return 0;
 663        }
 664        while (1) {
 665                struct ubifs_znode *zp;
 666
 667                zp = znode->parent;
 668                if (!zp)
 669                        return -ENOENT;
 670                nn = znode->iip - 1;
 671                znode = zp;
 672                if (nn >= 0) {
 673                        znode = get_znode(c, znode, nn);
 674                        if (IS_ERR(znode))
 675                                return PTR_ERR(znode);
 676                        while (znode->level != 0) {
 677                                nn = znode->child_cnt - 1;
 678                                znode = get_znode(c, znode, nn);
 679                                if (IS_ERR(znode))
 680                                        return PTR_ERR(znode);
 681                        }
 682                        nn = znode->child_cnt - 1;
 683                        break;
 684                }
 685        }
 686        *zn = znode;
 687        *n = nn;
 688        return 0;
 689}
 690
 691/**
 692 * resolve_collision - resolve a collision.
 693 * @c: UBIFS file-system description object
 694 * @key: key of a directory or extended attribute entry
 695 * @zn: znode is returned here
 696 * @n: zbranch number is passed and returned here
 697 * @nm: name of the entry
 698 *
 699 * This function is called for "hashed" keys to make sure that the found key
 700 * really corresponds to the looked up node (directory or extended attribute
 701 * entry). It returns %1 and sets @zn and @n if the collision is resolved.
 702 * %0 is returned if @nm is not found and @zn and @n are set to the previous
 703 * entry, i.e. to the entry after which @nm could follow if it were in TNC.
 704 * This means that @n may be set to %-1 if the leftmost key in @zn is the
 705 * previous one. A negative error code is returned on failures.
 706 */
 707static int resolve_collision(struct ubifs_info *c, const union ubifs_key *key,
 708                             struct ubifs_znode **zn, int *n,
 709                             const struct fscrypt_name *nm)
 710{
 711        int err;
 712
 713        err = matches_name(c, &(*zn)->zbranch[*n], nm);
 714        if (unlikely(err < 0))
 715                return err;
 716        if (err == NAME_MATCHES)
 717                return 1;
 718
 719        if (err == NAME_GREATER) {
 720                /* Look left */
 721                while (1) {
 722                        err = tnc_prev(c, zn, n);
 723                        if (err == -ENOENT) {
 724                                ubifs_assert(*n == 0);
 725                                *n = -1;
 726                                return 0;
 727                        }
 728                        if (err < 0)
 729                                return err;
 730                        if (keys_cmp(c, &(*zn)->zbranch[*n].key, key)) {
 731                                /*
 732                                 * We have found the branch after which we would
 733                                 * like to insert, but inserting in this znode
 734                                 * may still be wrong. Consider the following 3
 735                                 * znodes, in the case where we are resolving a
 736                                 * collision with Key2.
 737                                 *
 738                                 *                  znode zp
 739                                 *            ----------------------
 740                                 * level 1     |  Key0  |  Key1  |
 741                                 *            -----------------------
 742                                 *                 |            |
 743                                 *       znode za  |            |  znode zb
 744                                 *          ------------      ------------
 745                                 * level 0  |  Key0  |        |  Key2  |
 746                                 *          ------------      ------------
 747                                 *
 748                                 * The lookup finds Key2 in znode zb. Lets say
 749                                 * there is no match and the name is greater so
 750                                 * we look left. When we find Key0, we end up
 751                                 * here. If we return now, we will insert into
 752                                 * znode za at slot n = 1.  But that is invalid
 753                                 * according to the parent's keys.  Key2 must
 754                                 * be inserted into znode zb.
 755                                 *
 756                                 * Note, this problem is not relevant for the
 757                                 * case when we go right, because
 758                                 * 'tnc_insert()' would correct the parent key.
 759                                 */
 760                                if (*n == (*zn)->child_cnt - 1) {
 761                                        err = tnc_next(c, zn, n);
 762                                        if (err) {
 763                                                /* Should be impossible */
 764                                                ubifs_assert(0);
 765                                                if (err == -ENOENT)
 766                                                        err = -EINVAL;
 767                                                return err;
 768                                        }
 769                                        ubifs_assert(*n == 0);
 770                                        *n = -1;
 771                                }
 772                                return 0;
 773                        }
 774                        err = matches_name(c, &(*zn)->zbranch[*n], nm);
 775                        if (err < 0)
 776                                return err;
 777                        if (err == NAME_LESS)
 778                                return 0;
 779                        if (err == NAME_MATCHES)
 780                                return 1;
 781                        ubifs_assert(err == NAME_GREATER);
 782                }
 783        } else {
 784                int nn = *n;
 785                struct ubifs_znode *znode = *zn;
 786
 787                /* Look right */
 788                while (1) {
 789                        err = tnc_next(c, &znode, &nn);
 790                        if (err == -ENOENT)
 791                                return 0;
 792                        if (err < 0)
 793                                return err;
 794                        if (keys_cmp(c, &znode->zbranch[nn].key, key))
 795                                return 0;
 796                        err = matches_name(c, &znode->zbranch[nn], nm);
 797                        if (err < 0)
 798                                return err;
 799                        if (err == NAME_GREATER)
 800                                return 0;
 801                        *zn = znode;
 802                        *n = nn;
 803                        if (err == NAME_MATCHES)
 804                                return 1;
 805                        ubifs_assert(err == NAME_LESS);
 806                }
 807        }
 808}
 809
 810/**
 811 * fallible_matches_name - determine if a dent matches a given name.
 812 * @c: UBIFS file-system description object
 813 * @zbr: zbranch of dent
 814 * @nm: name to match
 815 *
 816 * This is a "fallible" version of 'matches_name()' function which does not
 817 * panic if the direntry/xentry referred by @zbr does not exist on the media.
 818 *
 819 * This function checks if xentry/direntry referred by zbranch @zbr matches name
 820 * @nm. Returns %NAME_MATCHES it does, %NAME_LESS if the name referred by @zbr
 821 * is less than @nm, %NAME_GREATER if it is greater than @nm, and @NOT_ON_MEDIA
 822 * if xentry/direntry referred by @zbr does not exist on the media. A negative
 823 * error code is returned in case of failure.
 824 */
 825static int fallible_matches_name(struct ubifs_info *c,
 826                                 struct ubifs_zbranch *zbr,
 827                                 const struct fscrypt_name *nm)
 828{
 829        struct ubifs_dent_node *dent;
 830        int nlen, err;
 831
 832        /* If possible, match against the dent in the leaf node cache */
 833        if (!zbr->leaf) {
 834                dent = kmalloc(zbr->len, GFP_NOFS);
 835                if (!dent)
 836                        return -ENOMEM;
 837
 838                err = fallible_read_node(c, &zbr->key, zbr, dent);
 839                if (err < 0)
 840                        goto out_free;
 841                if (err == 0) {
 842                        /* The node was not present */
 843                        err = NOT_ON_MEDIA;
 844                        goto out_free;
 845                }
 846                ubifs_assert(err == 1);
 847
 848                err = lnc_add_directly(c, zbr, dent);
 849                if (err)
 850                        goto out_free;
 851        } else
 852                dent = zbr->leaf;
 853
 854        nlen = le16_to_cpu(dent->nlen);
 855        err = memcmp(dent->name, fname_name(nm), min_t(int, nlen, fname_len(nm)));
 856        if (err == 0) {
 857                if (nlen == fname_len(nm))
 858                        return NAME_MATCHES;
 859                else if (nlen < fname_len(nm))
 860                        return NAME_LESS;
 861                else
 862                        return NAME_GREATER;
 863        } else if (err < 0)
 864                return NAME_LESS;
 865        else
 866                return NAME_GREATER;
 867
 868out_free:
 869        kfree(dent);
 870        return err;
 871}
 872
 873/**
 874 * fallible_resolve_collision - resolve a collision even if nodes are missing.
 875 * @c: UBIFS file-system description object
 876 * @key: key
 877 * @zn: znode is returned here
 878 * @n: branch number is passed and returned here
 879 * @nm: name of directory entry
 880 * @adding: indicates caller is adding a key to the TNC
 881 *
 882 * This is a "fallible" version of the 'resolve_collision()' function which
 883 * does not panic if one of the nodes referred to by TNC does not exist on the
 884 * media. This may happen when replaying the journal if a deleted node was
 885 * Garbage-collected and the commit was not done. A branch that refers to a node
 886 * that is not present is called a dangling branch. The following are the return
 887 * codes for this function:
 888 *  o if @nm was found, %1 is returned and @zn and @n are set to the found
 889 *    branch;
 890 *  o if we are @adding and @nm was not found, %0 is returned;
 891 *  o if we are not @adding and @nm was not found, but a dangling branch was
 892 *    found, then %1 is returned and @zn and @n are set to the dangling branch;
 893 *  o a negative error code is returned in case of failure.
 894 */
 895static int fallible_resolve_collision(struct ubifs_info *c,
 896                                      const union ubifs_key *key,
 897                                      struct ubifs_znode **zn, int *n,
 898                                      const struct fscrypt_name *nm,
 899                                      int adding)
 900{
 901        struct ubifs_znode *o_znode = NULL, *znode = *zn;
 902        int uninitialized_var(o_n), err, cmp, unsure = 0, nn = *n;
 903
 904        cmp = fallible_matches_name(c, &znode->zbranch[nn], nm);
 905        if (unlikely(cmp < 0))
 906                return cmp;
 907        if (cmp == NAME_MATCHES)
 908                return 1;
 909        if (cmp == NOT_ON_MEDIA) {
 910                o_znode = znode;
 911                o_n = nn;
 912                /*
 913                 * We are unlucky and hit a dangling branch straight away.
 914                 * Now we do not really know where to go to find the needed
 915                 * branch - to the left or to the right. Well, let's try left.
 916                 */
 917                unsure = 1;
 918        } else if (!adding)
 919                unsure = 1; /* Remove a dangling branch wherever it is */
 920
 921        if (cmp == NAME_GREATER || unsure) {
 922                /* Look left */
 923                while (1) {
 924                        err = tnc_prev(c, zn, n);
 925                        if (err == -ENOENT) {
 926                                ubifs_assert(*n == 0);
 927                                *n = -1;
 928                                break;
 929                        }
 930                        if (err < 0)
 931                                return err;
 932                        if (keys_cmp(c, &(*zn)->zbranch[*n].key, key)) {
 933                                /* See comments in 'resolve_collision()' */
 934                                if (*n == (*zn)->child_cnt - 1) {
 935                                        err = tnc_next(c, zn, n);
 936                                        if (err) {
 937                                                /* Should be impossible */
 938                                                ubifs_assert(0);
 939                                                if (err == -ENOENT)
 940                                                        err = -EINVAL;
 941                                                return err;
 942                                        }
 943                                        ubifs_assert(*n == 0);
 944                                        *n = -1;
 945                                }
 946                                break;
 947                        }
 948                        err = fallible_matches_name(c, &(*zn)->zbranch[*n], nm);
 949                        if (err < 0)
 950                                return err;
 951                        if (err == NAME_MATCHES)
 952                                return 1;
 953                        if (err == NOT_ON_MEDIA) {
 954                                o_znode = *zn;
 955                                o_n = *n;
 956                                continue;
 957                        }
 958                        if (!adding)
 959                                continue;
 960                        if (err == NAME_LESS)
 961                                break;
 962                        else
 963                                unsure = 0;
 964                }
 965        }
 966
 967        if (cmp == NAME_LESS || unsure) {
 968                /* Look right */
 969                *zn = znode;
 970                *n = nn;
 971                while (1) {
 972                        err = tnc_next(c, &znode, &nn);
 973                        if (err == -ENOENT)
 974                                break;
 975                        if (err < 0)
 976                                return err;
 977                        if (keys_cmp(c, &znode->zbranch[nn].key, key))
 978                                break;
 979                        err = fallible_matches_name(c, &znode->zbranch[nn], nm);
 980                        if (err < 0)
 981                                return err;
 982                        if (err == NAME_GREATER)
 983                                break;
 984                        *zn = znode;
 985                        *n = nn;
 986                        if (err == NAME_MATCHES)
 987                                return 1;
 988                        if (err == NOT_ON_MEDIA) {
 989                                o_znode = znode;
 990                                o_n = nn;
 991                        }
 992                }
 993        }
 994
 995        /* Never match a dangling branch when adding */
 996        if (adding || !o_znode)
 997                return 0;
 998
 999        dbg_mntk(key, "dangling match LEB %d:%d len %d key ",
1000                o_znode->zbranch[o_n].lnum, o_znode->zbranch[o_n].offs,
1001                o_znode->zbranch[o_n].len);
1002        *zn = o_znode;
1003        *n = o_n;
1004        return 1;
1005}
1006
1007/**
1008 * matches_position - determine if a zbranch matches a given position.
1009 * @zbr: zbranch of dent
1010 * @lnum: LEB number of dent to match
1011 * @offs: offset of dent to match
1012 *
1013 * This function returns %1 if @lnum:@offs matches, and %0 otherwise.
1014 */
1015static int matches_position(struct ubifs_zbranch *zbr, int lnum, int offs)
1016{
1017        if (zbr->lnum == lnum && zbr->offs == offs)
1018                return 1;
1019        else
1020                return 0;
1021}
1022
1023/**
1024 * resolve_collision_directly - resolve a collision directly.
1025 * @c: UBIFS file-system description object
1026 * @key: key of directory entry
1027 * @zn: znode is passed and returned here
1028 * @n: zbranch number is passed and returned here
1029 * @lnum: LEB number of dent node to match
1030 * @offs: offset of dent node to match
1031 *
1032 * This function is used for "hashed" keys to make sure the found directory or
1033 * extended attribute entry node is what was looked for. It is used when the
1034 * flash address of the right node is known (@lnum:@offs) which makes it much
1035 * easier to resolve collisions (no need to read entries and match full
1036 * names). This function returns %1 and sets @zn and @n if the collision is
1037 * resolved, %0 if @lnum:@offs is not found and @zn and @n are set to the
1038 * previous directory entry. Otherwise a negative error code is returned.
1039 */
1040static int resolve_collision_directly(struct ubifs_info *c,
1041                                      const union ubifs_key *key,
1042                                      struct ubifs_znode **zn, int *n,
1043                                      int lnum, int offs)
1044{
1045        struct ubifs_znode *znode;
1046        int nn, err;
1047
1048        znode = *zn;
1049        nn = *n;
1050        if (matches_position(&znode->zbranch[nn], lnum, offs))
1051                return 1;
1052
1053        /* Look left */
1054        while (1) {
1055                err = tnc_prev(c, &znode, &nn);
1056                if (err == -ENOENT)
1057                        break;
1058                if (err < 0)
1059                        return err;
1060                if (keys_cmp(c, &znode->zbranch[nn].key, key))
1061                        break;
1062                if (matches_position(&znode->zbranch[nn], lnum, offs)) {
1063                        *zn = znode;
1064                        *n = nn;
1065                        return 1;
1066                }
1067        }
1068
1069        /* Look right */
1070        znode = *zn;
1071        nn = *n;
1072        while (1) {
1073                err = tnc_next(c, &znode, &nn);
1074                if (err == -ENOENT)
1075                        return 0;
1076                if (err < 0)
1077                        return err;
1078                if (keys_cmp(c, &znode->zbranch[nn].key, key))
1079                        return 0;
1080                *zn = znode;
1081                *n = nn;
1082                if (matches_position(&znode->zbranch[nn], lnum, offs))
1083                        return 1;
1084        }
1085}
1086
1087/**
1088 * dirty_cow_bottom_up - dirty a znode and its ancestors.
1089 * @c: UBIFS file-system description object
1090 * @znode: znode to dirty
1091 *
1092 * If we do not have a unique key that resides in a znode, then we cannot
1093 * dirty that znode from the top down (i.e. by using lookup_level0_dirty)
1094 * This function records the path back to the last dirty ancestor, and then
1095 * dirties the znodes on that path.
1096 */
1097static struct ubifs_znode *dirty_cow_bottom_up(struct ubifs_info *c,
1098                                               struct ubifs_znode *znode)
1099{
1100        struct ubifs_znode *zp;
1101        int *path = c->bottom_up_buf, p = 0;
1102
1103        ubifs_assert(c->zroot.znode);
1104        ubifs_assert(znode);
1105        if (c->zroot.znode->level > BOTTOM_UP_HEIGHT) {
1106                kfree(c->bottom_up_buf);
1107                c->bottom_up_buf = kmalloc(c->zroot.znode->level * sizeof(int),
1108                                           GFP_NOFS);
1109                if (!c->bottom_up_buf)
1110                        return ERR_PTR(-ENOMEM);
1111                path = c->bottom_up_buf;
1112        }
1113        if (c->zroot.znode->level) {
1114                /* Go up until parent is dirty */
1115                while (1) {
1116                        int n;
1117
1118                        zp = znode->parent;
1119                        if (!zp)
1120                                break;
1121                        n = znode->iip;
1122                        ubifs_assert(p < c->zroot.znode->level);
1123                        path[p++] = n;
1124                        if (!zp->cnext && ubifs_zn_dirty(znode))
1125                                break;
1126                        znode = zp;
1127                }
1128        }
1129
1130        /* Come back down, dirtying as we go */
1131        while (1) {
1132                struct ubifs_zbranch *zbr;
1133
1134                zp = znode->parent;
1135                if (zp) {
1136                        ubifs_assert(path[p - 1] >= 0);
1137                        ubifs_assert(path[p - 1] < zp->child_cnt);
1138                        zbr = &zp->zbranch[path[--p]];
1139                        znode = dirty_cow_znode(c, zbr);
1140                } else {
1141                        ubifs_assert(znode == c->zroot.znode);
1142                        znode = dirty_cow_znode(c, &c->zroot);
1143                }
1144                if (IS_ERR(znode) || !p)
1145                        break;
1146                ubifs_assert(path[p - 1] >= 0);
1147                ubifs_assert(path[p - 1] < znode->child_cnt);
1148                znode = znode->zbranch[path[p - 1]].znode;
1149        }
1150
1151        return znode;
1152}
1153
1154/**
1155 * ubifs_lookup_level0 - search for zero-level znode.
1156 * @c: UBIFS file-system description object
1157 * @key:  key to lookup
1158 * @zn: znode is returned here
1159 * @n: znode branch slot number is returned here
1160 *
1161 * This function looks up the TNC tree and search for zero-level znode which
1162 * refers key @key. The found zero-level znode is returned in @zn. There are 3
1163 * cases:
1164 *   o exact match, i.e. the found zero-level znode contains key @key, then %1
1165 *     is returned and slot number of the matched branch is stored in @n;
1166 *   o not exact match, which means that zero-level znode does not contain
1167 *     @key, then %0 is returned and slot number of the closest branch is stored
1168 *     in @n;
1169 *   o @key is so small that it is even less than the lowest key of the
1170 *     leftmost zero-level node, then %0 is returned and %0 is stored in @n.
1171 *
1172 * Note, when the TNC tree is traversed, some znodes may be absent, then this
1173 * function reads corresponding indexing nodes and inserts them to TNC. In
1174 * case of failure, a negative error code is returned.
1175 */
1176int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
1177                        struct ubifs_znode **zn, int *n)
1178{
1179        int err, exact;
1180        struct ubifs_znode *znode;
1181        unsigned long time = get_seconds();
1182
1183        dbg_tnck(key, "search key ");
1184        ubifs_assert(key_type(c, key) < UBIFS_INVALID_KEY);
1185
1186        znode = c->zroot.znode;
1187        if (unlikely(!znode)) {
1188                znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
1189                if (IS_ERR(znode))
1190                        return PTR_ERR(znode);
1191        }
1192
1193        znode->time = time;
1194
1195        while (1) {
1196                struct ubifs_zbranch *zbr;
1197
1198                exact = ubifs_search_zbranch(c, znode, key, n);
1199
1200                if (znode->level == 0)
1201                        break;
1202
1203                if (*n < 0)
1204                        *n = 0;
1205                zbr = &znode->zbranch[*n];
1206
1207                if (zbr->znode) {
1208                        znode->time = time;
1209                        znode = zbr->znode;
1210                        continue;
1211                }
1212
1213                /* znode is not in TNC cache, load it from the media */
1214                znode = ubifs_load_znode(c, zbr, znode, *n);
1215                if (IS_ERR(znode))
1216                        return PTR_ERR(znode);
1217        }
1218
1219        *zn = znode;
1220        if (exact || !is_hash_key(c, key) || *n != -1) {
1221                dbg_tnc("found %d, lvl %d, n %d", exact, znode->level, *n);
1222                return exact;
1223        }
1224
1225        /*
1226         * Here is a tricky place. We have not found the key and this is a
1227         * "hashed" key, which may collide. The rest of the code deals with
1228         * situations like this:
1229         *
1230         *                  | 3 | 5 |
1231         *                  /       \
1232         *          | 3 | 5 |      | 6 | 7 | (x)
1233         *
1234         * Or more a complex example:
1235         *
1236         *                | 1 | 5 |
1237         *                /       \
1238         *       | 1 | 3 |         | 5 | 8 |
1239         *              \           /
1240         *          | 5 | 5 |   | 6 | 7 | (x)
1241         *
1242         * In the examples, if we are looking for key "5", we may reach nodes
1243         * marked with "(x)". In this case what we have do is to look at the
1244         * left and see if there is "5" key there. If there is, we have to
1245         * return it.
1246         *
1247         * Note, this whole situation is possible because we allow to have
1248         * elements which are equivalent to the next key in the parent in the
1249         * children of current znode. For example, this happens if we split a
1250         * znode like this: | 3 | 5 | 5 | 6 | 7 |, which results in something
1251         * like this:
1252         *                      | 3 | 5 |
1253         *                       /     \
1254         *                | 3 | 5 |   | 5 | 6 | 7 |
1255         *                              ^
1256         * And this becomes what is at the first "picture" after key "5" marked
1257         * with "^" is removed. What could be done is we could prohibit
1258         * splitting in the middle of the colliding sequence. Also, when
1259         * removing the leftmost key, we would have to correct the key of the
1260         * parent node, which would introduce additional complications. Namely,
1261         * if we changed the leftmost key of the parent znode, the garbage
1262         * collector would be unable to find it (GC is doing this when GC'ing
1263         * indexing LEBs). Although we already have an additional RB-tree where
1264         * we save such changed znodes (see 'ins_clr_old_idx_znode()') until
1265         * after the commit. But anyway, this does not look easy to implement
1266         * so we did not try this.
1267         */
1268        err = tnc_prev(c, &znode, n);
1269        if (err == -ENOENT) {
1270                dbg_tnc("found 0, lvl %d, n -1", znode->level);
1271                *n = -1;
1272                return 0;
1273        }
1274        if (unlikely(err < 0))
1275                return err;
1276        if (keys_cmp(c, key, &znode->zbranch[*n].key)) {
1277                dbg_tnc("found 0, lvl %d, n -1", znode->level);
1278                *n = -1;
1279                return 0;
1280        }
1281
1282        dbg_tnc("found 1, lvl %d, n %d", znode->level, *n);
1283        *zn = znode;
1284        return 1;
1285}
1286
1287/**
1288 * lookup_level0_dirty - search for zero-level znode dirtying.
1289 * @c: UBIFS file-system description object
1290 * @key:  key to lookup
1291 * @zn: znode is returned here
1292 * @n: znode branch slot number is returned here
1293 *
1294 * This function looks up the TNC tree and search for zero-level znode which
1295 * refers key @key. The found zero-level znode is returned in @zn. There are 3
1296 * cases:
1297 *   o exact match, i.e. the found zero-level znode contains key @key, then %1
1298 *     is returned and slot number of the matched branch is stored in @n;
1299 *   o not exact match, which means that zero-level znode does not contain @key
1300 *     then %0 is returned and slot number of the closed branch is stored in
1301 *     @n;
1302 *   o @key is so small that it is even less than the lowest key of the
1303 *     leftmost zero-level node, then %0 is returned and %-1 is stored in @n.
1304 *
1305 * Additionally all znodes in the path from the root to the located zero-level
1306 * znode are marked as dirty.
1307 *
1308 * Note, when the TNC tree is traversed, some znodes may be absent, then this
1309 * function reads corresponding indexing nodes and inserts them to TNC. In
1310 * case of failure, a negative error code is returned.
1311 */
1312static int lookup_level0_dirty(struct ubifs_info *c, const union ubifs_key *key,
1313                               struct ubifs_znode **zn, int *n)
1314{
1315        int err, exact;
1316        struct ubifs_znode *znode;
1317        unsigned long time = get_seconds();
1318
1319        dbg_tnck(key, "search and dirty key ");
1320
1321        znode = c->zroot.znode;
1322        if (unlikely(!znode)) {
1323                znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
1324                if (IS_ERR(znode))
1325                        return PTR_ERR(znode);
1326        }
1327
1328        znode = dirty_cow_znode(c, &c->zroot);
1329        if (IS_ERR(znode))
1330                return PTR_ERR(znode);
1331
1332        znode->time = time;
1333
1334        while (1) {
1335                struct ubifs_zbranch *zbr;
1336
1337                exact = ubifs_search_zbranch(c, znode, key, n);
1338
1339                if (znode->level == 0)
1340                        break;
1341
1342                if (*n < 0)
1343                        *n = 0;
1344                zbr = &znode->zbranch[*n];
1345
1346                if (zbr->znode) {
1347                        znode->time = time;
1348                        znode = dirty_cow_znode(c, zbr);
1349                        if (IS_ERR(znode))
1350                                return PTR_ERR(znode);
1351                        continue;
1352                }
1353
1354                /* znode is not in TNC cache, load it from the media */
1355                znode = ubifs_load_znode(c, zbr, znode, *n);
1356                if (IS_ERR(znode))
1357                        return PTR_ERR(znode);
1358                znode = dirty_cow_znode(c, zbr);
1359                if (IS_ERR(znode))
1360                        return PTR_ERR(znode);
1361        }
1362
1363        *zn = znode;
1364        if (exact || !is_hash_key(c, key) || *n != -1) {
1365                dbg_tnc("found %d, lvl %d, n %d", exact, znode->level, *n);
1366                return exact;
1367        }
1368
1369        /*
1370         * See huge comment at 'lookup_level0_dirty()' what is the rest of the
1371         * code.
1372         */
1373        err = tnc_prev(c, &znode, n);
1374        if (err == -ENOENT) {
1375                *n = -1;
1376                dbg_tnc("found 0, lvl %d, n -1", znode->level);
1377                return 0;
1378        }
1379        if (unlikely(err < 0))
1380                return err;
1381        if (keys_cmp(c, key, &znode->zbranch[*n].key)) {
1382                *n = -1;
1383                dbg_tnc("found 0, lvl %d, n -1", znode->level);
1384                return 0;
1385        }
1386
1387        if (znode->cnext || !ubifs_zn_dirty(znode)) {
1388                znode = dirty_cow_bottom_up(c, znode);
1389                if (IS_ERR(znode))
1390                        return PTR_ERR(znode);
1391        }
1392
1393        dbg_tnc("found 1, lvl %d, n %d", znode->level, *n);
1394        *zn = znode;
1395        return 1;
1396}
1397
1398/**
1399 * maybe_leb_gced - determine if a LEB may have been garbage collected.
1400 * @c: UBIFS file-system description object
1401 * @lnum: LEB number
1402 * @gc_seq1: garbage collection sequence number
1403 *
1404 * This function determines if @lnum may have been garbage collected since
1405 * sequence number @gc_seq1. If it may have been then %1 is returned, otherwise
1406 * %0 is returned.
1407 */
1408static int maybe_leb_gced(struct ubifs_info *c, int lnum, int gc_seq1)
1409{
1410        int gc_seq2, gced_lnum;
1411
1412        gced_lnum = c->gced_lnum;
1413        smp_rmb();
1414        gc_seq2 = c->gc_seq;
1415        /* Same seq means no GC */
1416        if (gc_seq1 == gc_seq2)
1417                return 0;
1418        /* Different by more than 1 means we don't know */
1419        if (gc_seq1 + 1 != gc_seq2)
1420                return 1;
1421        /*
1422         * We have seen the sequence number has increased by 1. Now we need to
1423         * be sure we read the right LEB number, so read it again.
1424         */
1425        smp_rmb();
1426        if (gced_lnum != c->gced_lnum)
1427                return 1;
1428        /* Finally we can check lnum */
1429        if (gced_lnum == lnum)
1430                return 1;
1431        return 0;
1432}
1433
1434/**
1435 * ubifs_tnc_locate - look up a file-system node and return it and its location.
1436 * @c: UBIFS file-system description object
1437 * @key: node key to lookup
1438 * @node: the node is returned here
1439 * @lnum: LEB number is returned here
1440 * @offs: offset is returned here
1441 *
1442 * This function looks up and reads node with key @key. The caller has to make
1443 * sure the @node buffer is large enough to fit the node. Returns zero in case
1444 * of success, %-ENOENT if the node was not found, and a negative error code in
1445 * case of failure. The node location can be returned in @lnum and @offs.
1446 */
1447int ubifs_tnc_locate(struct ubifs_info *c, const union ubifs_key *key,
1448                     void *node, int *lnum, int *offs)
1449{
1450        int found, n, err, safely = 0, gc_seq1;
1451        struct ubifs_znode *znode;
1452        struct ubifs_zbranch zbr, *zt;
1453
1454again:
1455        mutex_lock(&c->tnc_mutex);
1456        found = ubifs_lookup_level0(c, key, &znode, &n);
1457        if (!found) {
1458                err = -ENOENT;
1459                goto out;
1460        } else if (found < 0) {
1461                err = found;
1462                goto out;
1463        }
1464        zt = &znode->zbranch[n];
1465        if (lnum) {
1466                *lnum = zt->lnum;
1467                *offs = zt->offs;
1468        }
1469        if (is_hash_key(c, key)) {
1470                /*
1471                 * In this case the leaf node cache gets used, so we pass the
1472                 * address of the zbranch and keep the mutex locked
1473                 */
1474                err = tnc_read_hashed_node(c, zt, node);
1475                goto out;
1476        }
1477        if (safely) {
1478                err = ubifs_tnc_read_node(c, zt, node);
1479                goto out;
1480        }
1481        /* Drop the TNC mutex prematurely and race with garbage collection */
1482        zbr = znode->zbranch[n];
1483        gc_seq1 = c->gc_seq;
1484        mutex_unlock(&c->tnc_mutex);
1485
1486        if (ubifs_get_wbuf(c, zbr.lnum)) {
1487                /* We do not GC journal heads */
1488                err = ubifs_tnc_read_node(c, &zbr, node);
1489                return err;
1490        }
1491
1492        err = fallible_read_node(c, key, &zbr, node);
1493        if (err <= 0 || maybe_leb_gced(c, zbr.lnum, gc_seq1)) {
1494                /*
1495                 * The node may have been GC'ed out from under us so try again
1496                 * while keeping the TNC mutex locked.
1497                 */
1498                safely = 1;
1499                goto again;
1500        }
1501        return 0;
1502
1503out:
1504        mutex_unlock(&c->tnc_mutex);
1505        return err;
1506}
1507
1508/**
1509 * ubifs_tnc_get_bu_keys - lookup keys for bulk-read.
1510 * @c: UBIFS file-system description object
1511 * @bu: bulk-read parameters and results
1512 *
1513 * Lookup consecutive data node keys for the same inode that reside
1514 * consecutively in the same LEB. This function returns zero in case of success
1515 * and a negative error code in case of failure.
1516 *
1517 * Note, if the bulk-read buffer length (@bu->buf_len) is known, this function
1518 * makes sure bulk-read nodes fit the buffer. Otherwise, this function prepares
1519 * maximum possible amount of nodes for bulk-read.
1520 */
1521int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu)
1522{
1523        int n, err = 0, lnum = -1, uninitialized_var(offs);
1524        int uninitialized_var(len);
1525        unsigned int block = key_block(c, &bu->key);
1526        struct ubifs_znode *znode;
1527
1528        bu->cnt = 0;
1529        bu->blk_cnt = 0;
1530        bu->eof = 0;
1531
1532        mutex_lock(&c->tnc_mutex);
1533        /* Find first key */
1534        err = ubifs_lookup_level0(c, &bu->key, &znode, &n);
1535        if (err < 0)
1536                goto out;
1537        if (err) {
1538                /* Key found */
1539                len = znode->zbranch[n].len;
1540                /* The buffer must be big enough for at least 1 node */
1541                if (len > bu->buf_len) {
1542                        err = -EINVAL;
1543                        goto out;
1544                }
1545                /* Add this key */
1546                bu->zbranch[bu->cnt++] = znode->zbranch[n];
1547                bu->blk_cnt += 1;
1548                lnum = znode->zbranch[n].lnum;
1549                offs = ALIGN(znode->zbranch[n].offs + len, 8);
1550        }
1551        while (1) {
1552                struct ubifs_zbranch *zbr;
1553                union ubifs_key *key;
1554                unsigned int next_block;
1555
1556                /* Find next key */
1557                err = tnc_next(c, &znode, &n);
1558                if (err)
1559                        goto out;
1560                zbr = &znode->zbranch[n];
1561                key = &zbr->key;
1562                /* See if there is another data key for this file */
1563                if (key_inum(c, key) != key_inum(c, &bu->key) ||
1564                    key_type(c, key) != UBIFS_DATA_KEY) {
1565                        err = -ENOENT;
1566                        goto out;
1567                }
1568                if (lnum < 0) {
1569                        /* First key found */
1570                        lnum = zbr->lnum;
1571                        offs = ALIGN(zbr->offs + zbr->len, 8);
1572                        len = zbr->len;
1573                        if (len > bu->buf_len) {
1574                                err = -EINVAL;
1575                                goto out;
1576                        }
1577                } else {
1578                        /*
1579                         * The data nodes must be in consecutive positions in
1580                         * the same LEB.
1581                         */
1582                        if (zbr->lnum != lnum || zbr->offs != offs)
1583                                goto out;
1584                        offs += ALIGN(zbr->len, 8);
1585                        len = ALIGN(len, 8) + zbr->len;
1586                        /* Must not exceed buffer length */
1587                        if (len > bu->buf_len)
1588                                goto out;
1589                }
1590                /* Allow for holes */
1591                next_block = key_block(c, key);
1592                bu->blk_cnt += (next_block - block - 1);
1593                if (bu->blk_cnt >= UBIFS_MAX_BULK_READ)
1594                        goto out;
1595                block = next_block;
1596                /* Add this key */
1597                bu->zbranch[bu->cnt++] = *zbr;
1598                bu->blk_cnt += 1;
1599                /* See if we have room for more */
1600                if (bu->cnt >= UBIFS_MAX_BULK_READ)
1601                        goto out;
1602                if (bu->blk_cnt >= UBIFS_MAX_BULK_READ)
1603                        goto out;
1604        }
1605out:
1606        if (err == -ENOENT) {
1607                bu->eof = 1;
1608                err = 0;
1609        }
1610        bu->gc_seq = c->gc_seq;
1611        mutex_unlock(&c->tnc_mutex);
1612        if (err)
1613                return err;
1614        /*
1615         * An enormous hole could cause bulk-read to encompass too many
1616         * page cache pages, so limit the number here.
1617         */
1618        if (bu->blk_cnt > UBIFS_MAX_BULK_READ)
1619                bu->blk_cnt = UBIFS_MAX_BULK_READ;
1620        /*
1621         * Ensure that bulk-read covers a whole number of page cache
1622         * pages.
1623         */
1624        if (UBIFS_BLOCKS_PER_PAGE == 1 ||
1625            !(bu->blk_cnt & (UBIFS_BLOCKS_PER_PAGE - 1)))
1626                return 0;
1627        if (bu->eof) {
1628                /* At the end of file we can round up */
1629                bu->blk_cnt += UBIFS_BLOCKS_PER_PAGE - 1;
1630                return 0;
1631        }
1632        /* Exclude data nodes that do not make up a whole page cache page */
1633        block = key_block(c, &bu->key) + bu->blk_cnt;
1634        block &= ~(UBIFS_BLOCKS_PER_PAGE - 1);
1635        while (bu->cnt) {
1636                if (key_block(c, &bu->zbranch[bu->cnt - 1].key) < block)
1637                        break;
1638                bu->cnt -= 1;
1639        }
1640        return 0;
1641}
1642
1643/**
1644 * read_wbuf - bulk-read from a LEB with a wbuf.
1645 * @wbuf: wbuf that may overlap the read
1646 * @buf: buffer into which to read
1647 * @len: read length
1648 * @lnum: LEB number from which to read
1649 * @offs: offset from which to read
1650 *
1651 * This functions returns %0 on success or a negative error code on failure.
1652 */
1653static int read_wbuf(struct ubifs_wbuf *wbuf, void *buf, int len, int lnum,
1654                     int offs)
1655{
1656        const struct ubifs_info *c = wbuf->c;
1657        int rlen, overlap;
1658
1659        dbg_io("LEB %d:%d, length %d", lnum, offs, len);
1660        ubifs_assert(wbuf && lnum >= 0 && lnum < c->leb_cnt && offs >= 0);
1661        ubifs_assert(!(offs & 7) && offs < c->leb_size);
1662        ubifs_assert(offs + len <= c->leb_size);
1663
1664        spin_lock(&wbuf->lock);
1665        overlap = (lnum == wbuf->lnum && offs + len > wbuf->offs);
1666        if (!overlap) {
1667                /* We may safely unlock the write-buffer and read the data */
1668                spin_unlock(&wbuf->lock);
1669                return ubifs_leb_read(c, lnum, buf, offs, len, 0);
1670        }
1671
1672        /* Don't read under wbuf */
1673        rlen = wbuf->offs - offs;
1674        if (rlen < 0)
1675                rlen = 0;
1676
1677        /* Copy the rest from the write-buffer */
1678        memcpy(buf + rlen, wbuf->buf + offs + rlen - wbuf->offs, len - rlen);
1679        spin_unlock(&wbuf->lock);
1680
1681        if (rlen > 0)
1682                /* Read everything that goes before write-buffer */
1683                return ubifs_leb_read(c, lnum, buf, offs, rlen, 0);
1684
1685        return 0;
1686}
1687
1688/**
1689 * validate_data_node - validate data nodes for bulk-read.
1690 * @c: UBIFS file-system description object
1691 * @buf: buffer containing data node to validate
1692 * @zbr: zbranch of data node to validate
1693 *
1694 * This functions returns %0 on success or a negative error code on failure.
1695 */
1696static int validate_data_node(struct ubifs_info *c, void *buf,
1697                              struct ubifs_zbranch *zbr)
1698{
1699        union ubifs_key key1;
1700        struct ubifs_ch *ch = buf;
1701        int err, len;
1702
1703        if (ch->node_type != UBIFS_DATA_NODE) {
1704                ubifs_err(c, "bad node type (%d but expected %d)",
1705                          ch->node_type, UBIFS_DATA_NODE);
1706                goto out_err;
1707        }
1708
1709        err = ubifs_check_node(c, buf, zbr->lnum, zbr->offs, 0, 0);
1710        if (err) {
1711                ubifs_err(c, "expected node type %d", UBIFS_DATA_NODE);
1712                goto out;
1713        }
1714
1715        len = le32_to_cpu(ch->len);
1716        if (len != zbr->len) {
1717                ubifs_err(c, "bad node length %d, expected %d", len, zbr->len);
1718                goto out_err;
1719        }
1720
1721        /* Make sure the key of the read node is correct */
1722        key_read(c, buf + UBIFS_KEY_OFFSET, &key1);
1723        if (!keys_eq(c, &zbr->key, &key1)) {
1724                ubifs_err(c, "bad key in node at LEB %d:%d",
1725                          zbr->lnum, zbr->offs);
1726                dbg_tnck(&zbr->key, "looked for key ");
1727                dbg_tnck(&key1, "found node's key ");
1728                goto out_err;
1729        }
1730
1731        return 0;
1732
1733out_err:
1734        err = -EINVAL;
1735out:
1736        ubifs_err(c, "bad node at LEB %d:%d", zbr->lnum, zbr->offs);
1737        ubifs_dump_node(c, buf);
1738        dump_stack();
1739        return err;
1740}
1741
1742/**
1743 * ubifs_tnc_bulk_read - read a number of data nodes in one go.
1744 * @c: UBIFS file-system description object
1745 * @bu: bulk-read parameters and results
1746 *
1747 * This functions reads and validates the data nodes that were identified by the
1748 * 'ubifs_tnc_get_bu_keys()' function. This functions returns %0 on success,
1749 * -EAGAIN to indicate a race with GC, or another negative error code on
1750 * failure.
1751 */
1752int ubifs_tnc_bulk_read(struct ubifs_info *c, struct bu_info *bu)
1753{
1754        int lnum = bu->zbranch[0].lnum, offs = bu->zbranch[0].offs, len, err, i;
1755        struct ubifs_wbuf *wbuf;
1756        void *buf;
1757
1758        len = bu->zbranch[bu->cnt - 1].offs;
1759        len += bu->zbranch[bu->cnt - 1].len - offs;
1760        if (len > bu->buf_len) {
1761                ubifs_err(c, "buffer too small %d vs %d", bu->buf_len, len);
1762                return -EINVAL;
1763        }
1764
1765        /* Do the read */
1766        wbuf = ubifs_get_wbuf(c, lnum);
1767        if (wbuf)
1768                err = read_wbuf(wbuf, bu->buf, len, lnum, offs);
1769        else
1770                err = ubifs_leb_read(c, lnum, bu->buf, offs, len, 0);
1771
1772        /* Check for a race with GC */
1773        if (maybe_leb_gced(c, lnum, bu->gc_seq))
1774                return -EAGAIN;
1775
1776        if (err && err != -EBADMSG) {
1777                ubifs_err(c, "failed to read from LEB %d:%d, error %d",
1778                          lnum, offs, err);
1779                dump_stack();
1780                dbg_tnck(&bu->key, "key ");
1781                return err;
1782        }
1783
1784        /* Validate the nodes read */
1785        buf = bu->buf;
1786        for (i = 0; i < bu->cnt; i++) {
1787                err = validate_data_node(c, buf, &bu->zbranch[i]);
1788                if (err)
1789                        return err;
1790                buf = buf + ALIGN(bu->zbranch[i].len, 8);
1791        }
1792
1793        return 0;
1794}
1795
1796/**
1797 * do_lookup_nm- look up a "hashed" node.
1798 * @c: UBIFS file-system description object
1799 * @key: node key to lookup
1800 * @node: the node is returned here
1801 * @nm: node name
1802 *
1803 * This function looks up and reads a node which contains name hash in the key.
1804 * Since the hash may have collisions, there may be many nodes with the same
1805 * key, so we have to sequentially look to all of them until the needed one is
1806 * found. This function returns zero in case of success, %-ENOENT if the node
1807 * was not found, and a negative error code in case of failure.
1808 */
1809static int do_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
1810                        void *node, const struct fscrypt_name *nm)
1811{
1812        int found, n, err;
1813        struct ubifs_znode *znode;
1814
1815        dbg_tnck(key, "key ");
1816        mutex_lock(&c->tnc_mutex);
1817        found = ubifs_lookup_level0(c, key, &znode, &n);
1818        if (!found) {
1819                err = -ENOENT;
1820                goto out_unlock;
1821        } else if (found < 0) {
1822                err = found;
1823                goto out_unlock;
1824        }
1825
1826        ubifs_assert(n >= 0);
1827
1828        err = resolve_collision(c, key, &znode, &n, nm);
1829        dbg_tnc("rc returned %d, znode %p, n %d", err, znode, n);
1830        if (unlikely(err < 0))
1831                goto out_unlock;
1832        if (err == 0) {
1833                err = -ENOENT;
1834                goto out_unlock;
1835        }
1836
1837        err = tnc_read_hashed_node(c, &znode->zbranch[n], node);
1838
1839out_unlock:
1840        mutex_unlock(&c->tnc_mutex);
1841        return err;
1842}
1843
1844/**
1845 * ubifs_tnc_lookup_nm - look up a "hashed" node.
1846 * @c: UBIFS file-system description object
1847 * @key: node key to lookup
1848 * @node: the node is returned here
1849 * @nm: node name
1850 *
1851 * This function looks up and reads a node which contains name hash in the key.
1852 * Since the hash may have collisions, there may be many nodes with the same
1853 * key, so we have to sequentially look to all of them until the needed one is
1854 * found. This function returns zero in case of success, %-ENOENT if the node
1855 * was not found, and a negative error code in case of failure.
1856 */
1857int ubifs_tnc_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
1858                        void *node, const struct fscrypt_name *nm)
1859{
1860        int err, len;
1861        const struct ubifs_dent_node *dent = node;
1862
1863        /*
1864         * We assume that in most of the cases there are no name collisions and
1865         * 'ubifs_tnc_lookup()' returns us the right direntry.
1866         */
1867        err = ubifs_tnc_lookup(c, key, node);
1868        if (err)
1869                return err;
1870
1871        len = le16_to_cpu(dent->nlen);
1872        if (fname_len(nm) == len && !memcmp(dent->name, fname_name(nm), len))
1873                return 0;
1874
1875        /*
1876         * Unluckily, there are hash collisions and we have to iterate over
1877         * them look at each direntry with colliding name hash sequentially.
1878         */
1879
1880        return do_lookup_nm(c, key, node, nm);
1881}
1882
1883static int search_dh_cookie(struct ubifs_info *c, const union ubifs_key *key,
1884                            struct ubifs_dent_node *dent, uint32_t cookie,
1885                            struct ubifs_znode **zn, int *n)
1886{
1887        int err;
1888        struct ubifs_znode *znode = *zn;
1889        struct ubifs_zbranch *zbr;
1890        union ubifs_key *dkey;
1891
1892        for (;;) {
1893                if (!err) {
1894                        err = tnc_next(c, &znode, n);
1895                        if (err)
1896                                goto out;
1897                }
1898
1899                zbr = &znode->zbranch[*n];
1900                dkey = &zbr->key;
1901
1902                if (key_inum(c, dkey) != key_inum(c, key) ||
1903                    key_type(c, dkey) != key_type(c, key)) {
1904                        err = -ENOENT;
1905                        goto out;
1906                }
1907
1908                err = tnc_read_hashed_node(c, zbr, dent);
1909                if (err)
1910                        goto out;
1911
1912                if (key_hash(c, key) == key_hash(c, dkey) &&
1913                    le32_to_cpu(dent->cookie) == cookie) {
1914                        *zn = znode;
1915                        goto out;
1916                }
1917        }
1918
1919out:
1920
1921        return err;
1922}
1923
1924static int do_lookup_dh(struct ubifs_info *c, const union ubifs_key *key,
1925                        struct ubifs_dent_node *dent, uint32_t cookie)
1926{
1927        int n, err;
1928        struct ubifs_znode *znode;
1929        union ubifs_key start_key;
1930
1931        ubifs_assert(is_hash_key(c, key));
1932
1933        lowest_dent_key(c, &start_key, key_inum(c, key));
1934
1935        mutex_lock(&c->tnc_mutex);
1936        err = ubifs_lookup_level0(c, &start_key, &znode, &n);
1937        if (unlikely(err < 0))
1938                goto out_unlock;
1939
1940        err = search_dh_cookie(c, key, dent, cookie, &znode, &n);
1941
1942out_unlock:
1943        mutex_unlock(&c->tnc_mutex);
1944        return err;
1945}
1946
1947/**
1948 * ubifs_tnc_lookup_dh - look up a "double hashed" node.
1949 * @c: UBIFS file-system description object
1950 * @key: node key to lookup
1951 * @node: the node is returned here
1952 * @cookie: node cookie for collision resolution
1953 *
1954 * This function looks up and reads a node which contains name hash in the key.
1955 * Since the hash may have collisions, there may be many nodes with the same
1956 * key, so we have to sequentially look to all of them until the needed one
1957 * with the same cookie value is found.
1958 * This function returns zero in case of success, %-ENOENT if the node
1959 * was not found, and a negative error code in case of failure.
1960 */
1961int ubifs_tnc_lookup_dh(struct ubifs_info *c, const union ubifs_key *key,
1962                        void *node, uint32_t cookie)
1963{
1964        int err;
1965        const struct ubifs_dent_node *dent = node;
1966
1967        if (!c->double_hash)
1968                return -EOPNOTSUPP;
1969
1970        /*
1971         * We assume that in most of the cases there are no name collisions and
1972         * 'ubifs_tnc_lookup()' returns us the right direntry.
1973         */
1974        err = ubifs_tnc_lookup(c, key, node);
1975        if (err)
1976                return err;
1977
1978        if (le32_to_cpu(dent->cookie) == cookie)
1979                return 0;
1980
1981        /*
1982         * Unluckily, there are hash collisions and we have to iterate over
1983         * them look at each direntry with colliding name hash sequentially.
1984         */
1985        return do_lookup_dh(c, key, node, cookie);
1986}
1987
1988/**
1989 * correct_parent_keys - correct parent znodes' keys.
1990 * @c: UBIFS file-system description object
1991 * @znode: znode to correct parent znodes for
1992 *
1993 * This is a helper function for 'tnc_insert()'. When the key of the leftmost
1994 * zbranch changes, keys of parent znodes have to be corrected. This helper
1995 * function is called in such situations and corrects the keys if needed.
1996 */
1997static void correct_parent_keys(const struct ubifs_info *c,
1998                                struct ubifs_znode *znode)
1999{
2000        union ubifs_key *key, *key1;
2001
2002        ubifs_assert(znode->parent);
2003        ubifs_assert(znode->iip == 0);
2004
2005        key = &znode->zbranch[0].key;
2006        key1 = &znode->parent->zbranch[0].key;
2007
2008        while (keys_cmp(c, key, key1) < 0) {
2009                key_copy(c, key, key1);
2010                znode = znode->parent;
2011                znode->alt = 1;
2012                if (!znode->parent || znode->iip)
2013                        break;
2014                key1 = &znode->parent->zbranch[0].key;
2015        }
2016}
2017
2018/**
2019 * insert_zbranch - insert a zbranch into a znode.
2020 * @znode: znode into which to insert
2021 * @zbr: zbranch to insert
2022 * @n: slot number to insert to
2023 *
2024 * This is a helper function for 'tnc_insert()'. UBIFS does not allow "gaps" in
2025 * znode's array of zbranches and keeps zbranches consolidated, so when a new
2026 * zbranch has to be inserted to the @znode->zbranches[]' array at the @n-th
2027 * slot, zbranches starting from @n have to be moved right.
2028 */
2029static void insert_zbranch(struct ubifs_znode *znode,
2030                           const struct ubifs_zbranch *zbr, int n)
2031{
2032        int i;
2033
2034        ubifs_assert(ubifs_zn_dirty(znode));
2035
2036        if (znode->level) {
2037                for (i = znode->child_cnt; i > n; i--) {
2038                        znode->zbranch[i] = znode->zbranch[i - 1];
2039                        if (znode->zbranch[i].znode)
2040                                znode->zbranch[i].znode->iip = i;
2041                }
2042                if (zbr->znode)
2043                        zbr->znode->iip = n;
2044        } else
2045                for (i = znode->child_cnt; i > n; i--)
2046                        znode->zbranch[i] = znode->zbranch[i - 1];
2047
2048        znode->zbranch[n] = *zbr;
2049        znode->child_cnt += 1;
2050
2051        /*
2052         * After inserting at slot zero, the lower bound of the key range of
2053         * this znode may have changed. If this znode is subsequently split
2054         * then the upper bound of the key range may change, and furthermore
2055         * it could change to be lower than the original lower bound. If that
2056         * happens, then it will no longer be possible to find this znode in the
2057         * TNC using the key from the index node on flash. That is bad because
2058         * if it is not found, we will assume it is obsolete and may overwrite
2059         * it. Then if there is an unclean unmount, we will start using the
2060         * old index which will be broken.
2061         *
2062         * So we first mark znodes that have insertions at slot zero, and then
2063         * if they are split we add their lnum/offs to the old_idx tree.
2064         */
2065        if (n == 0)
2066                znode->alt = 1;
2067}
2068
2069/**
2070 * tnc_insert - insert a node into TNC.
2071 * @c: UBIFS file-system description object
2072 * @znode: znode to insert into
2073 * @zbr: branch to insert
2074 * @n: slot number to insert new zbranch to
2075 *
2076 * This function inserts a new node described by @zbr into znode @znode. If
2077 * znode does not have a free slot for new zbranch, it is split. Parent znodes
2078 * are splat as well if needed. Returns zero in case of success or a negative
2079 * error code in case of failure.
2080 */
2081static int tnc_insert(struct ubifs_info *c, struct ubifs_znode *znode,
2082                      struct ubifs_zbranch *zbr, int n)
2083{
2084        struct ubifs_znode *zn, *zi, *zp;
2085        int i, keep, move, appending = 0;
2086        union ubifs_key *key = &zbr->key, *key1;
2087
2088        ubifs_assert(n >= 0 && n <= c->fanout);
2089
2090        /* Implement naive insert for now */
2091again:
2092        zp = znode->parent;
2093        if (znode->child_cnt < c->fanout) {
2094                ubifs_assert(n != c->fanout);
2095                dbg_tnck(key, "inserted at %d level %d, key ", n, znode->level);
2096
2097                insert_zbranch(znode, zbr, n);
2098
2099                /* Ensure parent's key is correct */
2100                if (n == 0 && zp && znode->iip == 0)
2101                        correct_parent_keys(c, znode);
2102
2103                return 0;
2104        }
2105
2106        /*
2107         * Unfortunately, @znode does not have more empty slots and we have to
2108         * split it.
2109         */
2110        dbg_tnck(key, "splitting level %d, key ", znode->level);
2111
2112        if (znode->alt)
2113                /*
2114                 * We can no longer be sure of finding this znode by key, so we
2115                 * record it in the old_idx tree.
2116                 */
2117                ins_clr_old_idx_znode(c, znode);
2118
2119        zn = kzalloc(c->max_znode_sz, GFP_NOFS);
2120        if (!zn)
2121                return -ENOMEM;
2122        zn->parent = zp;
2123        zn->level = znode->level;
2124
2125        /* Decide where to split */
2126        if (znode->level == 0 && key_type(c, key) == UBIFS_DATA_KEY) {
2127                /* Try not to split consecutive data keys */
2128                if (n == c->fanout) {
2129                        key1 = &znode->zbranch[n - 1].key;
2130                        if (key_inum(c, key1) == key_inum(c, key) &&
2131                            key_type(c, key1) == UBIFS_DATA_KEY)
2132                                appending = 1;
2133                } else
2134                        goto check_split;
2135        } else if (appending && n != c->fanout) {
2136                /* Try not to split consecutive data keys */
2137                appending = 0;
2138check_split:
2139                if (n >= (c->fanout + 1) / 2) {
2140                        key1 = &znode->zbranch[0].key;
2141                        if (key_inum(c, key1) == key_inum(c, key) &&
2142                            key_type(c, key1) == UBIFS_DATA_KEY) {
2143                                key1 = &znode->zbranch[n].key;
2144                                if (key_inum(c, key1) != key_inum(c, key) ||
2145                                    key_type(c, key1) != UBIFS_DATA_KEY) {
2146                                        keep = n;
2147                                        move = c->fanout - keep;
2148                                        zi = znode;
2149                                        goto do_split;
2150                                }
2151                        }
2152                }
2153        }
2154
2155        if (appending) {
2156                keep = c->fanout;
2157                move = 0;
2158        } else {
2159                keep = (c->fanout + 1) / 2;
2160                move = c->fanout - keep;
2161        }
2162
2163        /*
2164         * Although we don't at present, we could look at the neighbors and see
2165         * if we can move some zbranches there.
2166         */
2167
2168        if (n < keep) {
2169                /* Insert into existing znode */
2170                zi = znode;
2171                move += 1;
2172                keep -= 1;
2173        } else {
2174                /* Insert into new znode */
2175                zi = zn;
2176                n -= keep;
2177                /* Re-parent */
2178                if (zn->level != 0)
2179                        zbr->znode->parent = zn;
2180        }
2181
2182do_split:
2183
2184        __set_bit(DIRTY_ZNODE, &zn->flags);
2185        atomic_long_inc(&c->dirty_zn_cnt);
2186
2187        zn->child_cnt = move;
2188        znode->child_cnt = keep;
2189
2190        dbg_tnc("moving %d, keeping %d", move, keep);
2191
2192        /* Move zbranch */
2193        for (i = 0; i < move; i++) {
2194                zn->zbranch[i] = znode->zbranch[keep + i];
2195                /* Re-parent */
2196                if (zn->level != 0)
2197                        if (zn->zbranch[i].znode) {
2198                                zn->zbranch[i].znode->parent = zn;
2199                                zn->zbranch[i].znode->iip = i;
2200                        }
2201        }
2202
2203        /* Insert new key and branch */
2204        dbg_tnck(key, "inserting at %d level %d, key ", n, zn->level);
2205
2206        insert_zbranch(zi, zbr, n);
2207
2208        /* Insert new znode (produced by spitting) into the parent */
2209        if (zp) {
2210                if (n == 0 && zi == znode && znode->iip == 0)
2211                        correct_parent_keys(c, znode);
2212
2213                /* Locate insertion point */
2214                n = znode->iip + 1;
2215
2216                /* Tail recursion */
2217                zbr->key = zn->zbranch[0].key;
2218                zbr->znode = zn;
2219                zbr->lnum = 0;
2220                zbr->offs = 0;
2221                zbr->len = 0;
2222                znode = zp;
2223
2224                goto again;
2225        }
2226
2227        /* We have to split root znode */
2228        dbg_tnc("creating new zroot at level %d", znode->level + 1);
2229
2230        zi = kzalloc(c->max_znode_sz, GFP_NOFS);
2231        if (!zi)
2232                return -ENOMEM;
2233
2234        zi->child_cnt = 2;
2235        zi->level = znode->level + 1;
2236
2237        __set_bit(DIRTY_ZNODE, &zi->flags);
2238        atomic_long_inc(&c->dirty_zn_cnt);
2239
2240        zi->zbranch[0].key = znode->zbranch[0].key;
2241        zi->zbranch[0].znode = znode;
2242        zi->zbranch[0].lnum = c->zroot.lnum;
2243        zi->zbranch[0].offs = c->zroot.offs;
2244        zi->zbranch[0].len = c->zroot.len;
2245        zi->zbranch[1].key = zn->zbranch[0].key;
2246        zi->zbranch[1].znode = zn;
2247
2248        c->zroot.lnum = 0;
2249        c->zroot.offs = 0;
2250        c->zroot.len = 0;
2251        c->zroot.znode = zi;
2252
2253        zn->parent = zi;
2254        zn->iip = 1;
2255        znode->parent = zi;
2256        znode->iip = 0;
2257
2258        return 0;
2259}
2260
2261/**
2262 * ubifs_tnc_add - add a node to TNC.
2263 * @c: UBIFS file-system description object
2264 * @key: key to add
2265 * @lnum: LEB number of node
2266 * @offs: node offset
2267 * @len: node length
2268 *
2269 * This function adds a node with key @key to TNC. The node may be new or it may
2270 * obsolete some existing one. Returns %0 on success or negative error code on
2271 * failure.
2272 */
2273int ubifs_tnc_add(struct ubifs_info *c, const union ubifs_key *key, int lnum,
2274                  int offs, int len)
2275{
2276        int found, n, err = 0;
2277        struct ubifs_znode *znode;
2278
2279        mutex_lock(&c->tnc_mutex);
2280        dbg_tnck(key, "%d:%d, len %d, key ", lnum, offs, len);
2281        found = lookup_level0_dirty(c, key, &znode, &n);
2282        if (!found) {
2283                struct ubifs_zbranch zbr;
2284
2285                zbr.znode = NULL;
2286                zbr.lnum = lnum;
2287                zbr.offs = offs;
2288                zbr.len = len;
2289                key_copy(c, key, &zbr.key);
2290                err = tnc_insert(c, znode, &zbr, n + 1);
2291        } else if (found == 1) {
2292                struct ubifs_zbranch *zbr = &znode->zbranch[n];
2293
2294                lnc_free(zbr);
2295                err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2296                zbr->lnum = lnum;
2297                zbr->offs = offs;
2298                zbr->len = len;
2299        } else
2300                err = found;
2301        if (!err)
2302                err = dbg_check_tnc(c, 0);
2303        mutex_unlock(&c->tnc_mutex);
2304
2305        return err;
2306}
2307
2308/**
2309 * ubifs_tnc_replace - replace a node in the TNC only if the old node is found.
2310 * @c: UBIFS file-system description object
2311 * @key: key to add
2312 * @old_lnum: LEB number of old node
2313 * @old_offs: old node offset
2314 * @lnum: LEB number of node
2315 * @offs: node offset
2316 * @len: node length
2317 *
2318 * This function replaces a node with key @key in the TNC only if the old node
2319 * is found.  This function is called by garbage collection when node are moved.
2320 * Returns %0 on success or negative error code on failure.
2321 */
2322int ubifs_tnc_replace(struct ubifs_info *c, const union ubifs_key *key,
2323                      int old_lnum, int old_offs, int lnum, int offs, int len)
2324{
2325        int found, n, err = 0;
2326        struct ubifs_znode *znode;
2327
2328        mutex_lock(&c->tnc_mutex);
2329        dbg_tnck(key, "old LEB %d:%d, new LEB %d:%d, len %d, key ", old_lnum,
2330                 old_offs, lnum, offs, len);
2331        found = lookup_level0_dirty(c, key, &znode, &n);
2332        if (found < 0) {
2333                err = found;
2334                goto out_unlock;
2335        }
2336
2337        if (found == 1) {
2338                struct ubifs_zbranch *zbr = &znode->zbranch[n];
2339
2340                found = 0;
2341                if (zbr->lnum == old_lnum && zbr->offs == old_offs) {
2342                        lnc_free(zbr);
2343                        err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2344                        if (err)
2345                                goto out_unlock;
2346                        zbr->lnum = lnum;
2347                        zbr->offs = offs;
2348                        zbr->len = len;
2349                        found = 1;
2350                } else if (is_hash_key(c, key)) {
2351                        found = resolve_collision_directly(c, key, &znode, &n,
2352                                                           old_lnum, old_offs);
2353                        dbg_tnc("rc returned %d, znode %p, n %d, LEB %d:%d",
2354                                found, znode, n, old_lnum, old_offs);
2355                        if (found < 0) {
2356                                err = found;
2357                                goto out_unlock;
2358                        }
2359
2360                        if (found) {
2361                                /* Ensure the znode is dirtied */
2362                                if (znode->cnext || !ubifs_zn_dirty(znode)) {
2363                                        znode = dirty_cow_bottom_up(c, znode);
2364                                        if (IS_ERR(znode)) {
2365                                                err = PTR_ERR(znode);
2366                                                goto out_unlock;
2367                                        }
2368                                }
2369                                zbr = &znode->zbranch[n];
2370                                lnc_free(zbr);
2371                                err = ubifs_add_dirt(c, zbr->lnum,
2372                                                     zbr->len);
2373                                if (err)
2374                                        goto out_unlock;
2375                                zbr->lnum = lnum;
2376                                zbr->offs = offs;
2377                                zbr->len = len;
2378                        }
2379                }
2380        }
2381
2382        if (!found)
2383                err = ubifs_add_dirt(c, lnum, len);
2384
2385        if (!err)
2386                err = dbg_check_tnc(c, 0);
2387
2388out_unlock:
2389        mutex_unlock(&c->tnc_mutex);
2390        return err;
2391}
2392
2393/**
2394 * ubifs_tnc_add_nm - add a "hashed" node to TNC.
2395 * @c: UBIFS file-system description object
2396 * @key: key to add
2397 * @lnum: LEB number of node
2398 * @offs: node offset
2399 * @len: node length
2400 * @nm: node name
2401 *
2402 * This is the same as 'ubifs_tnc_add()' but it should be used with keys which
2403 * may have collisions, like directory entry keys.
2404 */
2405int ubifs_tnc_add_nm(struct ubifs_info *c, const union ubifs_key *key,
2406                     int lnum, int offs, int len,
2407                     const struct fscrypt_name *nm)
2408{
2409        int found, n, err = 0;
2410        struct ubifs_znode *znode;
2411
2412        mutex_lock(&c->tnc_mutex);
2413        dbg_tnck(key, "LEB %d:%d, key ", lnum, offs);
2414        found = lookup_level0_dirty(c, key, &znode, &n);
2415        if (found < 0) {
2416                err = found;
2417                goto out_unlock;
2418        }
2419
2420        if (found == 1) {
2421                if (c->replaying)
2422                        found = fallible_resolve_collision(c, key, &znode, &n,
2423                                                           nm, 1);
2424                else
2425                        found = resolve_collision(c, key, &znode, &n, nm);
2426                dbg_tnc("rc returned %d, znode %p, n %d", found, znode, n);
2427                if (found < 0) {
2428                        err = found;
2429                        goto out_unlock;
2430                }
2431
2432                /* Ensure the znode is dirtied */
2433                if (znode->cnext || !ubifs_zn_dirty(znode)) {
2434                        znode = dirty_cow_bottom_up(c, znode);
2435                        if (IS_ERR(znode)) {
2436                                err = PTR_ERR(znode);
2437                                goto out_unlock;
2438                        }
2439                }
2440
2441                if (found == 1) {
2442                        struct ubifs_zbranch *zbr = &znode->zbranch[n];
2443
2444                        lnc_free(zbr);
2445                        err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2446                        zbr->lnum = lnum;
2447                        zbr->offs = offs;
2448                        zbr->len = len;
2449                        goto out_unlock;
2450                }
2451        }
2452
2453        if (!found) {
2454                struct ubifs_zbranch zbr;
2455
2456                zbr.znode = NULL;
2457                zbr.lnum = lnum;
2458                zbr.offs = offs;
2459                zbr.len = len;
2460                key_copy(c, key, &zbr.key);
2461                err = tnc_insert(c, znode, &zbr, n + 1);
2462                if (err)
2463                        goto out_unlock;
2464                if (c->replaying) {
2465                        /*
2466                         * We did not find it in the index so there may be a
2467                         * dangling branch still in the index. So we remove it
2468                         * by passing 'ubifs_tnc_remove_nm()' the same key but
2469                         * an unmatchable name.
2470                         */
2471                        struct fscrypt_name noname = { .disk_name = { .name = "", .len = 1 } };
2472
2473                        err = dbg_check_tnc(c, 0);
2474                        mutex_unlock(&c->tnc_mutex);
2475                        if (err)
2476                                return err;
2477                        return ubifs_tnc_remove_nm(c, key, &noname);
2478                }
2479        }
2480
2481out_unlock:
2482        if (!err)
2483                err = dbg_check_tnc(c, 0);
2484        mutex_unlock(&c->tnc_mutex);
2485        return err;
2486}
2487
2488/**
2489 * tnc_delete - delete a znode form TNC.
2490 * @c: UBIFS file-system description object
2491 * @znode: znode to delete from
2492 * @n: zbranch slot number to delete
2493 *
2494 * This function deletes a leaf node from @n-th slot of @znode. Returns zero in
2495 * case of success and a negative error code in case of failure.
2496 */
2497static int tnc_delete(struct ubifs_info *c, struct ubifs_znode *znode, int n)
2498{
2499        struct ubifs_zbranch *zbr;
2500        struct ubifs_znode *zp;
2501        int i, err;
2502
2503        /* Delete without merge for now */
2504        ubifs_assert(znode->level == 0);
2505        ubifs_assert(n >= 0 && n < c->fanout);
2506        dbg_tnck(&znode->zbranch[n].key, "deleting key ");
2507
2508        zbr = &znode->zbranch[n];
2509        lnc_free(zbr);
2510
2511        err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2512        if (err) {
2513                ubifs_dump_znode(c, znode);
2514                return err;
2515        }
2516
2517        /* We do not "gap" zbranch slots */
2518        for (i = n; i < znode->child_cnt - 1; i++)
2519                znode->zbranch[i] = znode->zbranch[i + 1];
2520        znode->child_cnt -= 1;
2521
2522        if (znode->child_cnt > 0)
2523                return 0;
2524
2525        /*
2526         * This was the last zbranch, we have to delete this znode from the
2527         * parent.
2528         */
2529
2530        do {
2531                ubifs_assert(!ubifs_zn_obsolete(znode));
2532                ubifs_assert(ubifs_zn_dirty(znode));
2533
2534                zp = znode->parent;
2535                n = znode->iip;
2536
2537                atomic_long_dec(&c->dirty_zn_cnt);
2538
2539                err = insert_old_idx_znode(c, znode);
2540                if (err)
2541                        return err;
2542
2543                if (znode->cnext) {
2544                        __set_bit(OBSOLETE_ZNODE, &znode->flags);
2545                        atomic_long_inc(&c->clean_zn_cnt);
2546                        atomic_long_inc(&ubifs_clean_zn_cnt);
2547                } else
2548                        kfree(znode);
2549                znode = zp;
2550        } while (znode->child_cnt == 1); /* while removing last child */
2551
2552        /* Remove from znode, entry n - 1 */
2553        znode->child_cnt -= 1;
2554        ubifs_assert(znode->level != 0);
2555        for (i = n; i < znode->child_cnt; i++) {
2556                znode->zbranch[i] = znode->zbranch[i + 1];
2557                if (znode->zbranch[i].znode)
2558                        znode->zbranch[i].znode->iip = i;
2559        }
2560
2561        /*
2562         * If this is the root and it has only 1 child then
2563         * collapse the tree.
2564         */
2565        if (!znode->parent) {
2566                while (znode->child_cnt == 1 && znode->level != 0) {
2567                        zp = znode;
2568                        zbr = &znode->zbranch[0];
2569                        znode = get_znode(c, znode, 0);
2570                        if (IS_ERR(znode))
2571                                return PTR_ERR(znode);
2572                        znode = dirty_cow_znode(c, zbr);
2573                        if (IS_ERR(znode))
2574                                return PTR_ERR(znode);
2575                        znode->parent = NULL;
2576                        znode->iip = 0;
2577                        if (c->zroot.len) {
2578                                err = insert_old_idx(c, c->zroot.lnum,
2579                                                     c->zroot.offs);
2580                                if (err)
2581                                        return err;
2582                        }
2583                        c->zroot.lnum = zbr->lnum;
2584                        c->zroot.offs = zbr->offs;
2585                        c->zroot.len = zbr->len;
2586                        c->zroot.znode = znode;
2587                        ubifs_assert(!ubifs_zn_obsolete(zp));
2588                        ubifs_assert(ubifs_zn_dirty(zp));
2589                        atomic_long_dec(&c->dirty_zn_cnt);
2590
2591                        if (zp->cnext) {
2592                                __set_bit(OBSOLETE_ZNODE, &zp->flags);
2593                                atomic_long_inc(&c->clean_zn_cnt);
2594                                atomic_long_inc(&ubifs_clean_zn_cnt);
2595                        } else
2596                                kfree(zp);
2597                }
2598        }
2599
2600        return 0;
2601}
2602
2603/**
2604 * ubifs_tnc_remove - remove an index entry of a node.
2605 * @c: UBIFS file-system description object
2606 * @key: key of node
2607 *
2608 * Returns %0 on success or negative error code on failure.
2609 */
2610int ubifs_tnc_remove(struct ubifs_info *c, const union ubifs_key *key)
2611{
2612        int found, n, err = 0;
2613        struct ubifs_znode *znode;
2614
2615        mutex_lock(&c->tnc_mutex);
2616        dbg_tnck(key, "key ");
2617        found = lookup_level0_dirty(c, key, &znode, &n);
2618        if (found < 0) {
2619                err = found;
2620                goto out_unlock;
2621        }
2622        if (found == 1)
2623                err = tnc_delete(c, znode, n);
2624        if (!err)
2625                err = dbg_check_tnc(c, 0);
2626
2627out_unlock:
2628        mutex_unlock(&c->tnc_mutex);
2629        return err;
2630}
2631
2632/**
2633 * ubifs_tnc_remove_nm - remove an index entry for a "hashed" node.
2634 * @c: UBIFS file-system description object
2635 * @key: key of node
2636 * @nm: directory entry name
2637 *
2638 * Returns %0 on success or negative error code on failure.
2639 */
2640int ubifs_tnc_remove_nm(struct ubifs_info *c, const union ubifs_key *key,
2641                        const struct fscrypt_name *nm)
2642{
2643        int n, err;
2644        struct ubifs_znode *znode;
2645
2646        mutex_lock(&c->tnc_mutex);
2647        dbg_tnck(key, "key ");
2648        err = lookup_level0_dirty(c, key, &znode, &n);
2649        if (err < 0)
2650                goto out_unlock;
2651
2652        if (err) {
2653                if (c->replaying)
2654                        err = fallible_resolve_collision(c, key, &znode, &n,
2655                                                         nm, 0);
2656                else
2657                        err = resolve_collision(c, key, &znode, &n, nm);
2658                dbg_tnc("rc returned %d, znode %p, n %d", err, znode, n);
2659                if (err < 0)
2660                        goto out_unlock;
2661                if (err) {
2662                        /* Ensure the znode is dirtied */
2663                        if (znode->cnext || !ubifs_zn_dirty(znode)) {
2664                                znode = dirty_cow_bottom_up(c, znode);
2665                                if (IS_ERR(znode)) {
2666                                        err = PTR_ERR(znode);
2667                                        goto out_unlock;
2668                                }
2669                        }
2670                        err = tnc_delete(c, znode, n);
2671                }
2672        }
2673
2674out_unlock:
2675        if (!err)
2676                err = dbg_check_tnc(c, 0);
2677        mutex_unlock(&c->tnc_mutex);
2678        return err;
2679}
2680
2681/**
2682 * ubifs_tnc_remove_dh - remove an index entry for a "double hashed" node.
2683 * @c: UBIFS file-system description object
2684 * @key: key of node
2685 * @cookie: node cookie for collision resolution
2686 *
2687 * Returns %0 on success or negative error code on failure.
2688 */
2689int ubifs_tnc_remove_dh(struct ubifs_info *c, const union ubifs_key *key,
2690                        uint32_t cookie)
2691{
2692        int n, err;
2693        struct ubifs_znode *znode;
2694        struct ubifs_dent_node *dent;
2695        struct ubifs_zbranch *zbr;
2696
2697        if (!c->double_hash)
2698                return -EOPNOTSUPP;
2699
2700        mutex_lock(&c->tnc_mutex);
2701        err = lookup_level0_dirty(c, key, &znode, &n);
2702        if (err <= 0)
2703                goto out_unlock;
2704
2705        zbr = &znode->zbranch[n];
2706        dent = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
2707        if (!dent) {
2708                err = -ENOMEM;
2709                goto out_unlock;
2710        }
2711
2712        err = tnc_read_hashed_node(c, zbr, dent);
2713        if (err)
2714                goto out_free;
2715
2716        /* If the cookie does not match, we're facing a hash collision. */
2717        if (le32_to_cpu(dent->cookie) != cookie) {
2718                union ubifs_key start_key;
2719
2720                lowest_dent_key(c, &start_key, key_inum(c, key));
2721
2722                err = ubifs_lookup_level0(c, &start_key, &znode, &n);
2723                if (unlikely(err < 0))
2724                        goto out_free;
2725
2726                err = search_dh_cookie(c, key, dent, cookie, &znode, &n);
2727                if (err)
2728                        goto out_free;
2729        }
2730
2731        if (znode->cnext || !ubifs_zn_dirty(znode)) {
2732                znode = dirty_cow_bottom_up(c, znode);
2733                if (IS_ERR(znode)) {
2734                        err = PTR_ERR(znode);
2735                        goto out_free;
2736                }
2737        }
2738        err = tnc_delete(c, znode, n);
2739
2740out_free:
2741        kfree(dent);
2742out_unlock:
2743        if (!err)
2744                err = dbg_check_tnc(c, 0);
2745        mutex_unlock(&c->tnc_mutex);
2746        return err;
2747}
2748
2749/**
2750 * key_in_range - determine if a key falls within a range of keys.
2751 * @c: UBIFS file-system description object
2752 * @key: key to check
2753 * @from_key: lowest key in range
2754 * @to_key: highest key in range
2755 *
2756 * This function returns %1 if the key is in range and %0 otherwise.
2757 */
2758static int key_in_range(struct ubifs_info *c, union ubifs_key *key,
2759                        union ubifs_key *from_key, union ubifs_key *to_key)
2760{
2761        if (keys_cmp(c, key, from_key) < 0)
2762                return 0;
2763        if (keys_cmp(c, key, to_key) > 0)
2764                return 0;
2765        return 1;
2766}
2767
2768/**
2769 * ubifs_tnc_remove_range - remove index entries in range.
2770 * @c: UBIFS file-system description object
2771 * @from_key: lowest key to remove
2772 * @to_key: highest key to remove
2773 *
2774 * This function removes index entries starting at @from_key and ending at
2775 * @to_key.  This function returns zero in case of success and a negative error
2776 * code in case of failure.
2777 */
2778int ubifs_tnc_remove_range(struct ubifs_info *c, union ubifs_key *from_key,
2779                           union ubifs_key *to_key)
2780{
2781        int i, n, k, err = 0;
2782        struct ubifs_znode *znode;
2783        union ubifs_key *key;
2784
2785        mutex_lock(&c->tnc_mutex);
2786        while (1) {
2787                /* Find first level 0 znode that contains keys to remove */
2788                err = ubifs_lookup_level0(c, from_key, &znode, &n);
2789                if (err < 0)
2790                        goto out_unlock;
2791
2792                if (err)
2793                        key = from_key;
2794                else {
2795                        err = tnc_next(c, &znode, &n);
2796                        if (err == -ENOENT) {
2797                                err = 0;
2798                                goto out_unlock;
2799                        }
2800                        if (err < 0)
2801                                goto out_unlock;
2802                        key = &znode->zbranch[n].key;
2803                        if (!key_in_range(c, key, from_key, to_key)) {
2804                                err = 0;
2805                                goto out_unlock;
2806                        }
2807                }
2808
2809                /* Ensure the znode is dirtied */
2810                if (znode->cnext || !ubifs_zn_dirty(znode)) {
2811                        znode = dirty_cow_bottom_up(c, znode);
2812                        if (IS_ERR(znode)) {
2813                                err = PTR_ERR(znode);
2814                                goto out_unlock;
2815                        }
2816                }
2817
2818                /* Remove all keys in range except the first */
2819                for (i = n + 1, k = 0; i < znode->child_cnt; i++, k++) {
2820                        key = &znode->zbranch[i].key;
2821                        if (!key_in_range(c, key, from_key, to_key))
2822                                break;
2823                        lnc_free(&znode->zbranch[i]);
2824                        err = ubifs_add_dirt(c, znode->zbranch[i].lnum,
2825                                             znode->zbranch[i].len);
2826                        if (err) {
2827                                ubifs_dump_znode(c, znode);
2828                                goto out_unlock;
2829                        }
2830                        dbg_tnck(key, "removing key ");
2831                }
2832                if (k) {
2833                        for (i = n + 1 + k; i < znode->child_cnt; i++)
2834                                znode->zbranch[i - k] = znode->zbranch[i];
2835                        znode->child_cnt -= k;
2836                }
2837
2838                /* Now delete the first */
2839                err = tnc_delete(c, znode, n);
2840                if (err)
2841                        goto out_unlock;
2842        }
2843
2844out_unlock:
2845        if (!err)
2846                err = dbg_check_tnc(c, 0);
2847        mutex_unlock(&c->tnc_mutex);
2848        return err;
2849}
2850
2851/**
2852 * ubifs_tnc_remove_ino - remove an inode from TNC.
2853 * @c: UBIFS file-system description object
2854 * @inum: inode number to remove
2855 *
2856 * This function remove inode @inum and all the extended attributes associated
2857 * with the anode from TNC and returns zero in case of success or a negative
2858 * error code in case of failure.
2859 */
2860int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum)
2861{
2862        union ubifs_key key1, key2;
2863        struct ubifs_dent_node *xent, *pxent = NULL;
2864        struct fscrypt_name nm = {0};
2865
2866        dbg_tnc("ino %lu", (unsigned long)inum);
2867
2868        /*
2869         * Walk all extended attribute entries and remove them together with
2870         * corresponding extended attribute inodes.
2871         */
2872        lowest_xent_key(c, &key1, inum);
2873        while (1) {
2874                ino_t xattr_inum;
2875                int err;
2876
2877                xent = ubifs_tnc_next_ent(c, &key1, &nm);
2878                if (IS_ERR(xent)) {
2879                        err = PTR_ERR(xent);
2880                        if (err == -ENOENT)
2881                                break;
2882                        return err;
2883                }
2884
2885                xattr_inum = le64_to_cpu(xent->inum);
2886                dbg_tnc("xent '%s', ino %lu", xent->name,
2887                        (unsigned long)xattr_inum);
2888
2889                ubifs_evict_xattr_inode(c, xattr_inum);
2890
2891                fname_name(&nm) = xent->name;
2892                fname_len(&nm) = le16_to_cpu(xent->nlen);
2893                err = ubifs_tnc_remove_nm(c, &key1, &nm);
2894                if (err) {
2895                        kfree(xent);
2896                        return err;
2897                }
2898
2899                lowest_ino_key(c, &key1, xattr_inum);
2900                highest_ino_key(c, &key2, xattr_inum);
2901                err = ubifs_tnc_remove_range(c, &key1, &key2);
2902                if (err) {
2903                        kfree(xent);
2904                        return err;
2905                }
2906
2907                kfree(pxent);
2908                pxent = xent;
2909                key_read(c, &xent->key, &key1);
2910        }
2911
2912        kfree(pxent);
2913        lowest_ino_key(c, &key1, inum);
2914        highest_ino_key(c, &key2, inum);
2915
2916        return ubifs_tnc_remove_range(c, &key1, &key2);
2917}
2918
2919/**
2920 * ubifs_tnc_next_ent - walk directory or extended attribute entries.
2921 * @c: UBIFS file-system description object
2922 * @key: key of last entry
2923 * @nm: name of last entry found or %NULL
2924 *
2925 * This function finds and reads the next directory or extended attribute entry
2926 * after the given key (@key) if there is one. @nm is used to resolve
2927 * collisions.
2928 *
2929 * If the name of the current entry is not known and only the key is known,
2930 * @nm->name has to be %NULL. In this case the semantics of this function is a
2931 * little bit different and it returns the entry corresponding to this key, not
2932 * the next one. If the key was not found, the closest "right" entry is
2933 * returned.
2934 *
2935 * If the fist entry has to be found, @key has to contain the lowest possible
2936 * key value for this inode and @name has to be %NULL.
2937 *
2938 * This function returns the found directory or extended attribute entry node
2939 * in case of success, %-ENOENT is returned if no entry was found, and a
2940 * negative error code is returned in case of failure.
2941 */
2942struct ubifs_dent_node *ubifs_tnc_next_ent(struct ubifs_info *c,
2943                                           union ubifs_key *key,
2944                                           const struct fscrypt_name *nm)
2945{
2946        int n, err, type = key_type(c, key);
2947        struct ubifs_znode *znode;
2948        struct ubifs_dent_node *dent;
2949        struct ubifs_zbranch *zbr;
2950        union ubifs_key *dkey;
2951
2952        dbg_tnck(key, "key ");
2953        ubifs_assert(is_hash_key(c, key));
2954
2955        mutex_lock(&c->tnc_mutex);
2956        err = ubifs_lookup_level0(c, key, &znode, &n);
2957        if (unlikely(err < 0))
2958                goto out_unlock;
2959
2960        if (fname_len(nm) > 0) {
2961                if (err) {
2962                        /* Handle collisions */
2963                        if (c->replaying)
2964                                err = fallible_resolve_collision(c, key, &znode, &n,
2965                                                         nm, 0);
2966                        else
2967                                err = resolve_collision(c, key, &znode, &n, nm);
2968                        dbg_tnc("rc returned %d, znode %p, n %d",
2969                                err, znode, n);
2970                        if (unlikely(err < 0))
2971                                goto out_unlock;
2972                }
2973
2974                /* Now find next entry */
2975                err = tnc_next(c, &znode, &n);
2976                if (unlikely(err))
2977                        goto out_unlock;
2978        } else {
2979                /*
2980                 * The full name of the entry was not given, in which case the
2981                 * behavior of this function is a little different and it
2982                 * returns current entry, not the next one.
2983                 */
2984                if (!err) {
2985                        /*
2986                         * However, the given key does not exist in the TNC
2987                         * tree and @znode/@n variables contain the closest
2988                         * "preceding" element. Switch to the next one.
2989                         */
2990                        err = tnc_next(c, &znode, &n);
2991                        if (err)
2992                                goto out_unlock;
2993                }
2994        }
2995
2996        zbr = &znode->zbranch[n];
2997        dent = kmalloc(zbr->len, GFP_NOFS);
2998        if (unlikely(!dent)) {
2999                err = -ENOMEM;
3000                goto out_unlock;
3001        }
3002
3003        /*
3004         * The above 'tnc_next()' call could lead us to the next inode, check
3005         * this.
3006         */
3007        dkey = &zbr->key;
3008        if (key_inum(c, dkey) != key_inum(c, key) ||
3009            key_type(c, dkey) != type) {
3010                err = -ENOENT;
3011                goto out_free;
3012        }
3013
3014        err = tnc_read_hashed_node(c, zbr, dent);
3015        if (unlikely(err))
3016                goto out_free;
3017
3018        mutex_unlock(&c->tnc_mutex);
3019        return dent;
3020
3021out_free:
3022        kfree(dent);
3023out_unlock:
3024        mutex_unlock(&c->tnc_mutex);
3025        return ERR_PTR(err);
3026}
3027
3028/**
3029 * tnc_destroy_cnext - destroy left-over obsolete znodes from a failed commit.
3030 * @c: UBIFS file-system description object
3031 *
3032 * Destroy left-over obsolete znodes from a failed commit.
3033 */
3034static void tnc_destroy_cnext(struct ubifs_info *c)
3035{
3036        struct ubifs_znode *cnext;
3037
3038        if (!c->cnext)
3039                return;
3040        ubifs_assert(c->cmt_state == COMMIT_BROKEN);
3041        cnext = c->cnext;
3042        do {
3043                struct ubifs_znode *znode = cnext;
3044
3045                cnext = cnext->cnext;
3046                if (ubifs_zn_obsolete(znode))
3047                        kfree(znode);
3048        } while (cnext && cnext != c->cnext);
3049}
3050
3051/**
3052 * ubifs_tnc_close - close TNC subsystem and free all related resources.
3053 * @c: UBIFS file-system description object
3054 */
3055void ubifs_tnc_close(struct ubifs_info *c)
3056{
3057        tnc_destroy_cnext(c);
3058        if (c->zroot.znode) {
3059                long n, freed;
3060
3061                n = atomic_long_read(&c->clean_zn_cnt);
3062                freed = ubifs_destroy_tnc_subtree(c->zroot.znode);
3063                ubifs_assert(freed == n);
3064                atomic_long_sub(n, &ubifs_clean_zn_cnt);
3065        }
3066        kfree(c->gap_lebs);
3067        kfree(c->ilebs);
3068        destroy_old_idx(c);
3069}
3070
3071/**
3072 * left_znode - get the znode to the left.
3073 * @c: UBIFS file-system description object
3074 * @znode: znode
3075 *
3076 * This function returns a pointer to the znode to the left of @znode or NULL if
3077 * there is not one. A negative error code is returned on failure.
3078 */
3079static struct ubifs_znode *left_znode(struct ubifs_info *c,
3080                                      struct ubifs_znode *znode)
3081{
3082        int level = znode->level;
3083
3084        while (1) {
3085                int n = znode->iip - 1;
3086
3087                /* Go up until we can go left */
3088                znode = znode->parent;
3089                if (!znode)
3090                        return NULL;
3091                if (n >= 0) {
3092                        /* Now go down the rightmost branch to 'level' */
3093                        znode = get_znode(c, znode, n);
3094                        if (IS_ERR(znode))
3095                                return znode;
3096                        while (znode->level != level) {
3097                                n = znode->child_cnt - 1;
3098                                znode = get_znode(c, znode, n);
3099                                if (IS_ERR(znode))
3100                                        return znode;
3101                        }
3102                        break;
3103                }
3104        }
3105        return znode;
3106}
3107
3108/**
3109 * right_znode - get the znode to the right.
3110 * @c: UBIFS file-system description object
3111 * @znode: znode
3112 *
3113 * This function returns a pointer to the znode to the right of @znode or NULL
3114 * if there is not one. A negative error code is returned on failure.
3115 */
3116static struct ubifs_znode *right_znode(struct ubifs_info *c,
3117                                       struct ubifs_znode *znode)
3118{
3119        int level = znode->level;
3120
3121        while (1) {
3122                int n = znode->iip + 1;
3123
3124                /* Go up until we can go right */
3125                znode = znode->parent;
3126                if (!znode)
3127                        return NULL;
3128                if (n < znode->child_cnt) {
3129                        /* Now go down the leftmost branch to 'level' */
3130                        znode = get_znode(c, znode, n);
3131                        if (IS_ERR(znode))
3132                                return znode;
3133                        while (znode->level != level) {
3134                                znode = get_znode(c, znode, 0);
3135                                if (IS_ERR(znode))
3136                                        return znode;
3137                        }
3138                        break;
3139                }
3140        }
3141        return znode;
3142}
3143
3144/**
3145 * lookup_znode - find a particular indexing node from TNC.
3146 * @c: UBIFS file-system description object
3147 * @key: index node key to lookup
3148 * @level: index node level
3149 * @lnum: index node LEB number
3150 * @offs: index node offset
3151 *
3152 * This function searches an indexing node by its first key @key and its
3153 * address @lnum:@offs. It looks up the indexing tree by pulling all indexing
3154 * nodes it traverses to TNC. This function is called for indexing nodes which
3155 * were found on the media by scanning, for example when garbage-collecting or
3156 * when doing in-the-gaps commit. This means that the indexing node which is
3157 * looked for does not have to have exactly the same leftmost key @key, because
3158 * the leftmost key may have been changed, in which case TNC will contain a
3159 * dirty znode which still refers the same @lnum:@offs. This function is clever
3160 * enough to recognize such indexing nodes.
3161 *
3162 * Note, if a znode was deleted or changed too much, then this function will
3163 * not find it. For situations like this UBIFS has the old index RB-tree
3164 * (indexed by @lnum:@offs).
3165 *
3166 * This function returns a pointer to the znode found or %NULL if it is not
3167 * found. A negative error code is returned on failure.
3168 */
3169static struct ubifs_znode *lookup_znode(struct ubifs_info *c,
3170                                        union ubifs_key *key, int level,
3171                                        int lnum, int offs)
3172{
3173        struct ubifs_znode *znode, *zn;
3174        int n, nn;
3175
3176        ubifs_assert(key_type(c, key) < UBIFS_INVALID_KEY);
3177
3178        /*
3179         * The arguments have probably been read off flash, so don't assume
3180         * they are valid.
3181         */
3182        if (level < 0)
3183                return ERR_PTR(-EINVAL);
3184
3185        /* Get the root znode */
3186        znode = c->zroot.znode;
3187        if (!znode) {
3188                znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
3189                if (IS_ERR(znode))
3190                        return znode;
3191        }
3192        /* Check if it is the one we are looking for */
3193        if (c->zroot.lnum == lnum && c->zroot.offs == offs)
3194                return znode;
3195        /* Descend to the parent level i.e. (level + 1) */
3196        if (level >= znode->level)
3197                return NULL;
3198        while (1) {
3199                ubifs_search_zbranch(c, znode, key, &n);
3200                if (n < 0) {
3201                        /*
3202                         * We reached a znode where the leftmost key is greater
3203                         * than the key we are searching for. This is the same
3204                         * situation as the one described in a huge comment at
3205                         * the end of the 'ubifs_lookup_level0()' function. And
3206                         * for exactly the same reasons we have to try to look
3207                         * left before giving up.
3208                         */
3209                        znode = left_znode(c, znode);
3210                        if (!znode)
3211                                return NULL;
3212                        if (IS_ERR(znode))
3213                                return znode;
3214                        ubifs_search_zbranch(c, znode, key, &n);
3215                        ubifs_assert(n >= 0);
3216                }
3217                if (znode->level == level + 1)
3218                        break;
3219                znode = get_znode(c, znode, n);
3220                if (IS_ERR(znode))
3221                        return znode;
3222        }
3223        /* Check if the child is the one we are looking for */
3224        if (znode->zbranch[n].lnum == lnum && znode->zbranch[n].offs == offs)
3225                return get_znode(c, znode, n);
3226        /* If the key is unique, there is nowhere else to look */
3227        if (!is_hash_key(c, key))
3228                return NULL;
3229        /*
3230         * The key is not unique and so may be also in the znodes to either
3231         * side.
3232         */
3233        zn = znode;
3234        nn = n;
3235        /* Look left */
3236        while (1) {
3237                /* Move one branch to the left */
3238                if (n)
3239                        n -= 1;
3240                else {
3241                        znode = left_znode(c, znode);
3242                        if (!znode)
3243                                break;
3244                        if (IS_ERR(znode))
3245                                return znode;
3246                        n = znode->child_cnt - 1;
3247                }
3248                /* Check it */
3249                if (znode->zbranch[n].lnum == lnum &&
3250                    znode->zbranch[n].offs == offs)
3251                        return get_znode(c, znode, n);
3252                /* Stop if the key is less than the one we are looking for */
3253                if (keys_cmp(c, &znode->zbranch[n].key, key) < 0)
3254                        break;
3255        }
3256        /* Back to the middle */
3257        znode = zn;
3258        n = nn;
3259        /* Look right */
3260        while (1) {
3261                /* Move one branch to the right */
3262                if (++n >= znode->child_cnt) {
3263                        znode = right_znode(c, znode);
3264                        if (!znode)
3265                                break;
3266                        if (IS_ERR(znode))
3267                                return znode;
3268                        n = 0;
3269                }
3270                /* Check it */
3271                if (znode->zbranch[n].lnum == lnum &&
3272                    znode->zbranch[n].offs == offs)
3273                        return get_znode(c, znode, n);
3274                /* Stop if the key is greater than the one we are looking for */
3275                if (keys_cmp(c, &znode->zbranch[n].key, key) > 0)
3276                        break;
3277        }
3278        return NULL;
3279}
3280
3281/**
3282 * is_idx_node_in_tnc - determine if an index node is in the TNC.
3283 * @c: UBIFS file-system description object
3284 * @key: key of index node
3285 * @level: index node level
3286 * @lnum: LEB number of index node
3287 * @offs: offset of index node
3288 *
3289 * This function returns %0 if the index node is not referred to in the TNC, %1
3290 * if the index node is referred to in the TNC and the corresponding znode is
3291 * dirty, %2 if an index node is referred to in the TNC and the corresponding
3292 * znode is clean, and a negative error code in case of failure.
3293 *
3294 * Note, the @key argument has to be the key of the first child. Also note,
3295 * this function relies on the fact that 0:0 is never a valid LEB number and
3296 * offset for a main-area node.
3297 */
3298int is_idx_node_in_tnc(struct ubifs_info *c, union ubifs_key *key, int level,
3299                       int lnum, int offs)
3300{
3301        struct ubifs_znode *znode;
3302
3303        znode = lookup_znode(c, key, level, lnum, offs);
3304        if (!znode)
3305                return 0;
3306        if (IS_ERR(znode))
3307                return PTR_ERR(znode);
3308
3309        return ubifs_zn_dirty(znode) ? 1 : 2;
3310}
3311
3312/**
3313 * is_leaf_node_in_tnc - determine if a non-indexing not is in the TNC.
3314 * @c: UBIFS file-system description object
3315 * @key: node key
3316 * @lnum: node LEB number
3317 * @offs: node offset
3318 *
3319 * This function returns %1 if the node is referred to in the TNC, %0 if it is
3320 * not, and a negative error code in case of failure.
3321 *
3322 * Note, this function relies on the fact that 0:0 is never a valid LEB number
3323 * and offset for a main-area node.
3324 */
3325static int is_leaf_node_in_tnc(struct ubifs_info *c, union ubifs_key *key,
3326                               int lnum, int offs)
3327{
3328        struct ubifs_zbranch *zbr;
3329        struct ubifs_znode *znode, *zn;
3330        int n, found, err, nn;
3331        const int unique = !is_hash_key(c, key);
3332
3333        found = ubifs_lookup_level0(c, key, &znode, &n);
3334        if (found < 0)
3335                return found; /* Error code */
3336        if (!found)
3337                return 0;
3338        zbr = &znode->zbranch[n];
3339        if (lnum == zbr->lnum && offs == zbr->offs)
3340                return 1; /* Found it */
3341        if (unique)
3342                return 0;
3343        /*
3344         * Because the key is not unique, we have to look left
3345         * and right as well
3346         */
3347        zn = znode;
3348        nn = n;
3349        /* Look left */
3350        while (1) {
3351                err = tnc_prev(c, &znode, &n);
3352                if (err == -ENOENT)
3353                        break;
3354                if (err)
3355                        return err;
3356                if (keys_cmp(c, key, &znode->zbranch[n].key))
3357                        break;
3358                zbr = &znode->zbranch[n];
3359                if (lnum == zbr->lnum && offs == zbr->offs)
3360                        return 1; /* Found it */
3361        }
3362        /* Look right */
3363        znode = zn;
3364        n = nn;
3365        while (1) {
3366                err = tnc_next(c, &znode, &n);
3367                if (err) {
3368                        if (err == -ENOENT)
3369                                return 0;
3370                        return err;
3371                }
3372                if (keys_cmp(c, key, &znode->zbranch[n].key))
3373                        break;
3374                zbr = &znode->zbranch[n];
3375                if (lnum == zbr->lnum && offs == zbr->offs)
3376                        return 1; /* Found it */
3377        }
3378        return 0;
3379}
3380
3381/**
3382 * ubifs_tnc_has_node - determine whether a node is in the TNC.
3383 * @c: UBIFS file-system description object
3384 * @key: node key
3385 * @level: index node level (if it is an index node)
3386 * @lnum: node LEB number
3387 * @offs: node offset
3388 * @is_idx: non-zero if the node is an index node
3389 *
3390 * This function returns %1 if the node is in the TNC, %0 if it is not, and a
3391 * negative error code in case of failure. For index nodes, @key has to be the
3392 * key of the first child. An index node is considered to be in the TNC only if
3393 * the corresponding znode is clean or has not been loaded.
3394 */
3395int ubifs_tnc_has_node(struct ubifs_info *c, union ubifs_key *key, int level,
3396                       int lnum, int offs, int is_idx)
3397{
3398        int err;
3399
3400        mutex_lock(&c->tnc_mutex);
3401        if (is_idx) {
3402                err = is_idx_node_in_tnc(c, key, level, lnum, offs);
3403                if (err < 0)
3404                        goto out_unlock;
3405                if (err == 1)
3406                        /* The index node was found but it was dirty */
3407                        err = 0;
3408                else if (err == 2)
3409                        /* The index node was found and it was clean */
3410                        err = 1;
3411                else
3412                        BUG_ON(err != 0);
3413        } else
3414                err = is_leaf_node_in_tnc(c, key, lnum, offs);
3415
3416out_unlock:
3417        mutex_unlock(&c->tnc_mutex);
3418        return err;
3419}
3420
3421/**
3422 * ubifs_dirty_idx_node - dirty an index node.
3423 * @c: UBIFS file-system description object
3424 * @key: index node key
3425 * @level: index node level
3426 * @lnum: index node LEB number
3427 * @offs: index node offset
3428 *
3429 * This function loads and dirties an index node so that it can be garbage
3430 * collected. The @key argument has to be the key of the first child. This
3431 * function relies on the fact that 0:0 is never a valid LEB number and offset
3432 * for a main-area node. Returns %0 on success and a negative error code on
3433 * failure.
3434 */
3435int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level,
3436                         int lnum, int offs)
3437{
3438        struct ubifs_znode *znode;
3439        int err = 0;
3440
3441        mutex_lock(&c->tnc_mutex);
3442        znode = lookup_znode(c, key, level, lnum, offs);
3443        if (!znode)
3444                goto out_unlock;
3445        if (IS_ERR(znode)) {
3446                err = PTR_ERR(znode);
3447                goto out_unlock;
3448        }
3449        znode = dirty_cow_bottom_up(c, znode);
3450        if (IS_ERR(znode)) {
3451                err = PTR_ERR(znode);
3452                goto out_unlock;
3453        }
3454
3455out_unlock:
3456        mutex_unlock(&c->tnc_mutex);
3457        return err;
3458}
3459
3460/**
3461 * dbg_check_inode_size - check if inode size is correct.
3462 * @c: UBIFS file-system description object
3463 * @inum: inode number
3464 * @size: inode size
3465 *
3466 * This function makes sure that the inode size (@size) is correct and it does
3467 * not have any pages beyond @size. Returns zero if the inode is OK, %-EINVAL
3468 * if it has a data page beyond @size, and other negative error code in case of
3469 * other errors.
3470 */
3471int dbg_check_inode_size(struct ubifs_info *c, const struct inode *inode,
3472                         loff_t size)
3473{
3474        int err, n;
3475        union ubifs_key from_key, to_key, *key;
3476        struct ubifs_znode *znode;
3477        unsigned int block;
3478
3479        if (!S_ISREG(inode->i_mode))
3480                return 0;
3481        if (!dbg_is_chk_gen(c))
3482                return 0;
3483
3484        block = (size + UBIFS_BLOCK_SIZE - 1) >> UBIFS_BLOCK_SHIFT;
3485        data_key_init(c, &from_key, inode->i_ino, block);
3486        highest_data_key(c, &to_key, inode->i_ino);
3487
3488        mutex_lock(&c->tnc_mutex);
3489        err = ubifs_lookup_level0(c, &from_key, &znode, &n);
3490        if (err < 0)
3491                goto out_unlock;
3492
3493        if (err) {
3494                key = &from_key;
3495                goto out_dump;
3496        }
3497
3498        err = tnc_next(c, &znode, &n);
3499        if (err == -ENOENT) {
3500                err = 0;
3501                goto out_unlock;
3502        }
3503        if (err < 0)
3504                goto out_unlock;
3505
3506        ubifs_assert(err == 0);
3507        key = &znode->zbranch[n].key;
3508        if (!key_in_range(c, key, &from_key, &to_key))
3509                goto out_unlock;
3510
3511out_dump:
3512        block = key_block(c, key);
3513        ubifs_err(c, "inode %lu has size %lld, but there are data at offset %lld",
3514                  (unsigned long)inode->i_ino, size,
3515                  ((loff_t)block) << UBIFS_BLOCK_SHIFT);
3516        mutex_unlock(&c->tnc_mutex);
3517        ubifs_dump_inode(c, inode);
3518        dump_stack();
3519        return -EINVAL;
3520
3521out_unlock:
3522        mutex_unlock(&c->tnc_mutex);
3523        return err;
3524}
3525