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