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 * Author: Adrian Hunter 20 */ 21 22 #include "ubifs.h" 23 24 /* 25 * An orphan is an inode number whose inode node has been committed to the index 26 * with a link count of zero. That happens when an open file is deleted 27 * (unlinked) and then a commit is run. In the normal course of events the inode 28 * would be deleted when the file is closed. However in the case of an unclean 29 * unmount, orphans need to be accounted for. After an unclean unmount, the 30 * orphans' inodes must be deleted which means either scanning the entire index 31 * looking for them, or keeping a list on flash somewhere. This unit implements 32 * the latter approach. 33 * 34 * The orphan area is a fixed number of LEBs situated between the LPT area and 35 * the main area. The number of orphan area LEBs is specified when the file 36 * system is created. The minimum number is 1. The size of the orphan area 37 * should be so that it can hold the maximum number of orphans that are expected 38 * to ever exist at one time. 39 * 40 * The number of orphans that can fit in a LEB is: 41 * 42 * (c->leb_size - UBIFS_ORPH_NODE_SZ) / sizeof(__le64) 43 * 44 * For example: a 15872 byte LEB can fit 1980 orphans so 1 LEB may be enough. 45 * 46 * Orphans are accumulated in a rb-tree. When an inode's link count drops to 47 * zero, the inode number is added to the rb-tree. It is removed from the tree 48 * when the inode is deleted. Any new orphans that are in the orphan tree when 49 * the commit is run, are written to the orphan area in 1 or more orphan nodes. 50 * If the orphan area is full, it is consolidated to make space. There is 51 * always enough space because validation prevents the user from creating more 52 * than the maximum number of orphans allowed. 53 */ 54 55 static int dbg_check_orphans(struct ubifs_info *c); 56 57 /** 58 * ubifs_add_orphan - add an orphan. 59 * @c: UBIFS file-system description object 60 * @inum: orphan inode number 61 * 62 * Add an orphan. This function is called when an inodes link count drops to 63 * zero. 64 */ 65 int ubifs_add_orphan(struct ubifs_info *c, ino_t inum) 66 { 67 struct ubifs_orphan *orphan, *o; 68 struct rb_node **p, *parent = NULL; 69 70 orphan = kzalloc(sizeof(struct ubifs_orphan), GFP_NOFS); 71 if (!orphan) 72 return -ENOMEM; 73 orphan->inum = inum; 74 orphan->new = 1; 75 76 spin_lock(&c->orphan_lock); 77 if (c->tot_orphans >= c->max_orphans) { 78 spin_unlock(&c->orphan_lock); 79 kfree(orphan); 80 return -ENFILE; 81 } 82 p = &c->orph_tree.rb_node; 83 while (*p) { 84 parent = *p; 85 o = rb_entry(parent, struct ubifs_orphan, rb); 86 if (inum < o->inum) 87 p = &(*p)->rb_left; 88 else if (inum > o->inum) 89 p = &(*p)->rb_right; 90 else { 91 ubifs_err("orphaned twice"); 92 spin_unlock(&c->orphan_lock); 93 kfree(orphan); 94 return 0; 95 } 96 } 97 c->tot_orphans += 1; 98 c->new_orphans += 1; 99 rb_link_node(&orphan->rb, parent, p); 100 rb_insert_color(&orphan->rb, &c->orph_tree); 101 list_add_tail(&orphan->list, &c->orph_list); 102 list_add_tail(&orphan->new_list, &c->orph_new); 103 spin_unlock(&c->orphan_lock); 104 dbg_gen("ino %lu", (unsigned long)inum); 105 return 0; 106 } 107 108 /** 109 * ubifs_delete_orphan - delete an orphan. 110 * @c: UBIFS file-system description object 111 * @inum: orphan inode number 112 * 113 * Delete an orphan. This function is called when an inode is deleted. 114 */ 115 void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum) 116 { 117 struct ubifs_orphan *o; 118 struct rb_node *p; 119 120 spin_lock(&c->orphan_lock); 121 p = c->orph_tree.rb_node; 122 while (p) { 123 o = rb_entry(p, struct ubifs_orphan, rb); 124 if (inum < o->inum) 125 p = p->rb_left; 126 else if (inum > o->inum) 127 p = p->rb_right; 128 else { 129 if (o->del) { 130 spin_unlock(&c->orphan_lock); 131 dbg_gen("deleted twice ino %lu", 132 (unsigned long)inum); 133 return; 134 } 135 if (o->cmt) { 136 o->del = 1; 137 o->dnext = c->orph_dnext; 138 c->orph_dnext = o; 139 spin_unlock(&c->orphan_lock); 140 dbg_gen("delete later ino %lu", 141 (unsigned long)inum); 142 return; 143 } 144 rb_erase(p, &c->orph_tree); 145 list_del(&o->list); 146 c->tot_orphans -= 1; 147 if (o->new) { 148 list_del(&o->new_list); 149 c->new_orphans -= 1; 150 } 151 spin_unlock(&c->orphan_lock); 152 kfree(o); 153 dbg_gen("inum %lu", (unsigned long)inum); 154 return; 155 } 156 } 157 spin_unlock(&c->orphan_lock); 158 ubifs_err("missing orphan ino %lu", (unsigned long)inum); 159 dump_stack(); 160 } 161 162 /** 163 * ubifs_orphan_start_commit - start commit of orphans. 164 * @c: UBIFS file-system description object 165 * 166 * Start commit of orphans. 167 */ 168 int ubifs_orphan_start_commit(struct ubifs_info *c) 169 { 170 struct ubifs_orphan *orphan, **last; 171 172 spin_lock(&c->orphan_lock); 173 last = &c->orph_cnext; 174 list_for_each_entry(orphan, &c->orph_new, new_list) { 175 ubifs_assert(orphan->new); 176 ubifs_assert(!orphan->cmt); 177 orphan->new = 0; 178 orphan->cmt = 1; 179 *last = orphan; 180 last = &orphan->cnext; 181 } 182 *last = NULL; 183 c->cmt_orphans = c->new_orphans; 184 c->new_orphans = 0; 185 dbg_cmt("%d orphans to commit", c->cmt_orphans); 186 INIT_LIST_HEAD(&c->orph_new); 187 if (c->tot_orphans == 0) 188 c->no_orphs = 1; 189 else 190 c->no_orphs = 0; 191 spin_unlock(&c->orphan_lock); 192 return 0; 193 } 194 195 /** 196 * avail_orphs - calculate available space. 197 * @c: UBIFS file-system description object 198 * 199 * This function returns the number of orphans that can be written in the 200 * available space. 201 */ 202 static int avail_orphs(struct ubifs_info *c) 203 { 204 int avail_lebs, avail, gap; 205 206 avail_lebs = c->orph_lebs - (c->ohead_lnum - c->orph_first) - 1; 207 avail = avail_lebs * 208 ((c->leb_size - UBIFS_ORPH_NODE_SZ) / sizeof(__le64)); 209 gap = c->leb_size - c->ohead_offs; 210 if (gap >= UBIFS_ORPH_NODE_SZ + sizeof(__le64)) 211 avail += (gap - UBIFS_ORPH_NODE_SZ) / sizeof(__le64); 212 return avail; 213 } 214 215 /** 216 * tot_avail_orphs - calculate total space. 217 * @c: UBIFS file-system description object 218 * 219 * This function returns the number of orphans that can be written in half 220 * the total space. That leaves half the space for adding new orphans. 221 */ 222 static int tot_avail_orphs(struct ubifs_info *c) 223 { 224 int avail_lebs, avail; 225 226 avail_lebs = c->orph_lebs; 227 avail = avail_lebs * 228 ((c->leb_size - UBIFS_ORPH_NODE_SZ) / sizeof(__le64)); 229 return avail / 2; 230 } 231 232 /** 233 * do_write_orph_node - write a node to the orphan head. 234 * @c: UBIFS file-system description object 235 * @len: length of node 236 * @atomic: write atomically 237 * 238 * This function writes a node to the orphan head from the orphan buffer. If 239 * %atomic is not zero, then the write is done atomically. On success, %0 is 240 * returned, otherwise a negative error code is returned. 241 */ 242 static int do_write_orph_node(struct ubifs_info *c, int len, int atomic) 243 { 244 int err = 0; 245 246 if (atomic) { 247 ubifs_assert(c->ohead_offs == 0); 248 ubifs_prepare_node(c, c->orph_buf, len, 1); 249 len = ALIGN(len, c->min_io_size); 250 err = ubifs_leb_change(c, c->ohead_lnum, c->orph_buf, len); 251 } else { 252 if (c->ohead_offs == 0) { 253 /* Ensure LEB has been unmapped */ 254 err = ubifs_leb_unmap(c, c->ohead_lnum); 255 if (err) 256 return err; 257 } 258 err = ubifs_write_node(c, c->orph_buf, len, c->ohead_lnum, 259 c->ohead_offs); 260 } 261 return err; 262 } 263 264 /** 265 * write_orph_node - write an orphan node. 266 * @c: UBIFS file-system description object 267 * @atomic: write atomically 268 * 269 * This function builds an orphan node from the cnext list and writes it to the 270 * orphan head. On success, %0 is returned, otherwise a negative error code 271 * is returned. 272 */ 273 static int write_orph_node(struct ubifs_info *c, int atomic) 274 { 275 struct ubifs_orphan *orphan, *cnext; 276 struct ubifs_orph_node *orph; 277 int gap, err, len, cnt, i; 278 279 ubifs_assert(c->cmt_orphans > 0); 280 gap = c->leb_size - c->ohead_offs; 281 if (gap < UBIFS_ORPH_NODE_SZ + sizeof(__le64)) { 282 c->ohead_lnum += 1; 283 c->ohead_offs = 0; 284 gap = c->leb_size; 285 if (c->ohead_lnum > c->orph_last) { 286 /* 287 * We limit the number of orphans so that this should 288 * never happen. 289 */ 290 ubifs_err("out of space in orphan area"); 291 return -EINVAL; 292 } 293 } 294 cnt = (gap - UBIFS_ORPH_NODE_SZ) / sizeof(__le64); 295 if (cnt > c->cmt_orphans) 296 cnt = c->cmt_orphans; 297 len = UBIFS_ORPH_NODE_SZ + cnt * sizeof(__le64); 298 ubifs_assert(c->orph_buf); 299 orph = c->orph_buf; 300 orph->ch.node_type = UBIFS_ORPH_NODE; 301 spin_lock(&c->orphan_lock); 302 cnext = c->orph_cnext; 303 for (i = 0; i < cnt; i++) { 304 orphan = cnext; 305 ubifs_assert(orphan->cmt); 306 orph->inos[i] = cpu_to_le64(orphan->inum); 307 orphan->cmt = 0; 308 cnext = orphan->cnext; 309 orphan->cnext = NULL; 310 } 311 c->orph_cnext = cnext; 312 c->cmt_orphans -= cnt; 313 spin_unlock(&c->orphan_lock); 314 if (c->cmt_orphans) 315 orph->cmt_no = cpu_to_le64(c->cmt_no); 316 else 317 /* Mark the last node of the commit */ 318 orph->cmt_no = cpu_to_le64((c->cmt_no) | (1ULL << 63)); 319 ubifs_assert(c->ohead_offs + len <= c->leb_size); 320 ubifs_assert(c->ohead_lnum >= c->orph_first); 321 ubifs_assert(c->ohead_lnum <= c->orph_last); 322 err = do_write_orph_node(c, len, atomic); 323 c->ohead_offs += ALIGN(len, c->min_io_size); 324 c->ohead_offs = ALIGN(c->ohead_offs, 8); 325 return err; 326 } 327 328 /** 329 * write_orph_nodes - write orphan nodes until there are no more to commit. 330 * @c: UBIFS file-system description object 331 * @atomic: write atomically 332 * 333 * This function writes orphan nodes for all the orphans to commit. On success, 334 * %0 is returned, otherwise a negative error code is returned. 335 */ 336 static int write_orph_nodes(struct ubifs_info *c, int atomic) 337 { 338 int err; 339 340 while (c->cmt_orphans > 0) { 341 err = write_orph_node(c, atomic); 342 if (err) 343 return err; 344 } 345 if (atomic) { 346 int lnum; 347 348 /* Unmap any unused LEBs after consolidation */ 349 for (lnum = c->ohead_lnum + 1; lnum <= c->orph_last; lnum++) { 350 err = ubifs_leb_unmap(c, lnum); 351 if (err) 352 return err; 353 } 354 } 355 return 0; 356 } 357 358 /** 359 * consolidate - consolidate the orphan area. 360 * @c: UBIFS file-system description object 361 * 362 * This function enables consolidation by putting all the orphans into the list 363 * to commit. The list is in the order that the orphans were added, and the 364 * LEBs are written atomically in order, so at no time can orphans be lost by 365 * an unclean unmount. 366 * 367 * This function returns %0 on success and a negative error code on failure. 368 */ 369 static int consolidate(struct ubifs_info *c) 370 { 371 int tot_avail = tot_avail_orphs(c), err = 0; 372 373 spin_lock(&c->orphan_lock); 374 dbg_cmt("there is space for %d orphans and there are %d", 375 tot_avail, c->tot_orphans); 376 if (c->tot_orphans - c->new_orphans <= tot_avail) { 377 struct ubifs_orphan *orphan, **last; 378 int cnt = 0; 379 380 /* Change the cnext list to include all non-new orphans */ 381 last = &c->orph_cnext; 382 list_for_each_entry(orphan, &c->orph_list, list) { 383 if (orphan->new) 384 continue; 385 orphan->cmt = 1; 386 *last = orphan; 387 last = &orphan->cnext; 388 cnt += 1; 389 } 390 *last = NULL; 391 ubifs_assert(cnt == c->tot_orphans - c->new_orphans); 392 c->cmt_orphans = cnt; 393 c->ohead_lnum = c->orph_first; 394 c->ohead_offs = 0; 395 } else { 396 /* 397 * We limit the number of orphans so that this should 398 * never happen. 399 */ 400 ubifs_err("out of space in orphan area"); 401 err = -EINVAL; 402 } 403 spin_unlock(&c->orphan_lock); 404 return err; 405 } 406 407 /** 408 * commit_orphans - commit orphans. 409 * @c: UBIFS file-system description object 410 * 411 * This function commits orphans to flash. On success, %0 is returned, 412 * otherwise a negative error code is returned. 413 */ 414 static int commit_orphans(struct ubifs_info *c) 415 { 416 int avail, atomic = 0, err; 417 418 ubifs_assert(c->cmt_orphans > 0); 419 avail = avail_orphs(c); 420 if (avail < c->cmt_orphans) { 421 /* Not enough space to write new orphans, so consolidate */ 422 err = consolidate(c); 423 if (err) 424 return err; 425 atomic = 1; 426 } 427 err = write_orph_nodes(c, atomic); 428 return err; 429 } 430 431 /** 432 * erase_deleted - erase the orphans marked for deletion. 433 * @c: UBIFS file-system description object 434 * 435 * During commit, the orphans being committed cannot be deleted, so they are 436 * marked for deletion and deleted by this function. Also, the recovery 437 * adds killed orphans to the deletion list, and therefore they are deleted 438 * here too. 439 */ 440 static void erase_deleted(struct ubifs_info *c) 441 { 442 struct ubifs_orphan *orphan, *dnext; 443 444 spin_lock(&c->orphan_lock); 445 dnext = c->orph_dnext; 446 while (dnext) { 447 orphan = dnext; 448 dnext = orphan->dnext; 449 ubifs_assert(!orphan->new); 450 ubifs_assert(orphan->del); 451 rb_erase(&orphan->rb, &c->orph_tree); 452 list_del(&orphan->list); 453 c->tot_orphans -= 1; 454 dbg_gen("deleting orphan ino %lu", (unsigned long)orphan->inum); 455 kfree(orphan); 456 } 457 c->orph_dnext = NULL; 458 spin_unlock(&c->orphan_lock); 459 } 460 461 /** 462 * ubifs_orphan_end_commit - end commit of orphans. 463 * @c: UBIFS file-system description object 464 * 465 * End commit of orphans. 466 */ 467 int ubifs_orphan_end_commit(struct ubifs_info *c) 468 { 469 int err; 470 471 if (c->cmt_orphans != 0) { 472 err = commit_orphans(c); 473 if (err) 474 return err; 475 } 476 erase_deleted(c); 477 err = dbg_check_orphans(c); 478 return err; 479 } 480 481 /** 482 * ubifs_clear_orphans - erase all LEBs used for orphans. 483 * @c: UBIFS file-system description object 484 * 485 * If recovery is not required, then the orphans from the previous session 486 * are not needed. This function locates the LEBs used to record 487 * orphans, and un-maps them. 488 */ 489 int ubifs_clear_orphans(struct ubifs_info *c) 490 { 491 int lnum, err; 492 493 for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) { 494 err = ubifs_leb_unmap(c, lnum); 495 if (err) 496 return err; 497 } 498 c->ohead_lnum = c->orph_first; 499 c->ohead_offs = 0; 500 return 0; 501 } 502 503 /** 504 * insert_dead_orphan - insert an orphan. 505 * @c: UBIFS file-system description object 506 * @inum: orphan inode number 507 * 508 * This function is a helper to the 'do_kill_orphans()' function. The orphan 509 * must be kept until the next commit, so it is added to the rb-tree and the 510 * deletion list. 511 */ 512 static int insert_dead_orphan(struct ubifs_info *c, ino_t inum) 513 { 514 struct ubifs_orphan *orphan, *o; 515 struct rb_node **p, *parent = NULL; 516 517 orphan = kzalloc(sizeof(struct ubifs_orphan), GFP_KERNEL); 518 if (!orphan) 519 return -ENOMEM; 520 orphan->inum = inum; 521 522 p = &c->orph_tree.rb_node; 523 while (*p) { 524 parent = *p; 525 o = rb_entry(parent, struct ubifs_orphan, rb); 526 if (inum < o->inum) 527 p = &(*p)->rb_left; 528 else if (inum > o->inum) 529 p = &(*p)->rb_right; 530 else { 531 /* Already added - no problem */ 532 kfree(orphan); 533 return 0; 534 } 535 } 536 c->tot_orphans += 1; 537 rb_link_node(&orphan->rb, parent, p); 538 rb_insert_color(&orphan->rb, &c->orph_tree); 539 list_add_tail(&orphan->list, &c->orph_list); 540 orphan->del = 1; 541 orphan->dnext = c->orph_dnext; 542 c->orph_dnext = orphan; 543 dbg_mnt("ino %lu, new %d, tot %d", (unsigned long)inum, 544 c->new_orphans, c->tot_orphans); 545 return 0; 546 } 547 548 /** 549 * do_kill_orphans - remove orphan inodes from the index. 550 * @c: UBIFS file-system description object 551 * @sleb: scanned LEB 552 * @last_cmt_no: cmt_no of last orphan node read is passed and returned here 553 * @outofdate: whether the LEB is out of date is returned here 554 * @last_flagged: whether the end orphan node is encountered 555 * 556 * This function is a helper to the 'kill_orphans()' function. It goes through 557 * every orphan node in a LEB and for every inode number recorded, removes 558 * all keys for that inode from the TNC. 559 */ 560 static int do_kill_orphans(struct ubifs_info *c, struct ubifs_scan_leb *sleb, 561 unsigned long long *last_cmt_no, int *outofdate, 562 int *last_flagged) 563 { 564 struct ubifs_scan_node *snod; 565 struct ubifs_orph_node *orph; 566 unsigned long long cmt_no; 567 ino_t inum; 568 int i, n, err, first = 1; 569 570 list_for_each_entry(snod, &sleb->nodes, list) { 571 if (snod->type != UBIFS_ORPH_NODE) { 572 ubifs_err("invalid node type %d in orphan area at %d:%d", 573 snod->type, sleb->lnum, snod->offs); 574 ubifs_dump_node(c, snod->node); 575 return -EINVAL; 576 } 577 578 orph = snod->node; 579 580 /* Check commit number */ 581 cmt_no = le64_to_cpu(orph->cmt_no) & LLONG_MAX; 582 /* 583 * The commit number on the master node may be less, because 584 * of a failed commit. If there are several failed commits in a 585 * row, the commit number written on orphan nodes will continue 586 * to increase (because the commit number is adjusted here) even 587 * though the commit number on the master node stays the same 588 * because the master node has not been re-written. 589 */ 590 if (cmt_no > c->cmt_no) 591 c->cmt_no = cmt_no; 592 if (cmt_no < *last_cmt_no && *last_flagged) { 593 /* 594 * The last orphan node had a higher commit number and 595 * was flagged as the last written for that commit 596 * number. That makes this orphan node, out of date. 597 */ 598 if (!first) { 599 ubifs_err("out of order commit number %llu in orphan node at %d:%d", 600 cmt_no, sleb->lnum, snod->offs); 601 ubifs_dump_node(c, snod->node); 602 return -EINVAL; 603 } 604 dbg_rcvry("out of date LEB %d", sleb->lnum); 605 *outofdate = 1; 606 return 0; 607 } 608 609 if (first) 610 first = 0; 611 612 n = (le32_to_cpu(orph->ch.len) - UBIFS_ORPH_NODE_SZ) >> 3; 613 for (i = 0; i < n; i++) { 614 inum = le64_to_cpu(orph->inos[i]); 615 dbg_rcvry("deleting orphaned inode %lu", 616 (unsigned long)inum); 617 err = ubifs_tnc_remove_ino(c, inum); 618 if (err) 619 return err; 620 err = insert_dead_orphan(c, inum); 621 if (err) 622 return err; 623 } 624 625 *last_cmt_no = cmt_no; 626 if (le64_to_cpu(orph->cmt_no) & (1ULL << 63)) { 627 dbg_rcvry("last orph node for commit %llu at %d:%d", 628 cmt_no, sleb->lnum, snod->offs); 629 *last_flagged = 1; 630 } else 631 *last_flagged = 0; 632 } 633 634 return 0; 635 } 636 637 /** 638 * kill_orphans - remove all orphan inodes from the index. 639 * @c: UBIFS file-system description object 640 * 641 * If recovery is required, then orphan inodes recorded during the previous 642 * session (which ended with an unclean unmount) must be deleted from the index. 643 * This is done by updating the TNC, but since the index is not updated until 644 * the next commit, the LEBs where the orphan information is recorded are not 645 * erased until the next commit. 646 */ 647 static int kill_orphans(struct ubifs_info *c) 648 { 649 unsigned long long last_cmt_no = 0; 650 int lnum, err = 0, outofdate = 0, last_flagged = 0; 651 652 c->ohead_lnum = c->orph_first; 653 c->ohead_offs = 0; 654 /* Check no-orphans flag and skip this if no orphans */ 655 if (c->no_orphs) { 656 dbg_rcvry("no orphans"); 657 return 0; 658 } 659 /* 660 * Orph nodes always start at c->orph_first and are written to each 661 * successive LEB in turn. Generally unused LEBs will have been unmapped 662 * but may contain out of date orphan nodes if the unmap didn't go 663 * through. In addition, the last orphan node written for each commit is 664 * marked (top bit of orph->cmt_no is set to 1). It is possible that 665 * there are orphan nodes from the next commit (i.e. the commit did not 666 * complete successfully). In that case, no orphans will have been lost 667 * due to the way that orphans are written, and any orphans added will 668 * be valid orphans anyway and so can be deleted. 669 */ 670 for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) { 671 struct ubifs_scan_leb *sleb; 672 673 dbg_rcvry("LEB %d", lnum); 674 sleb = ubifs_scan(c, lnum, 0, c->sbuf, 1); 675 if (IS_ERR(sleb)) { 676 if (PTR_ERR(sleb) == -EUCLEAN) 677 sleb = ubifs_recover_leb(c, lnum, 0, 678 c->sbuf, -1); 679 if (IS_ERR(sleb)) { 680 err = PTR_ERR(sleb); 681 break; 682 } 683 } 684 err = do_kill_orphans(c, sleb, &last_cmt_no, &outofdate, 685 &last_flagged); 686 if (err || outofdate) { 687 ubifs_scan_destroy(sleb); 688 break; 689 } 690 if (sleb->endpt) { 691 c->ohead_lnum = lnum; 692 c->ohead_offs = sleb->endpt; 693 } 694 ubifs_scan_destroy(sleb); 695 } 696 return err; 697 } 698 699 /** 700 * ubifs_mount_orphans - delete orphan inodes and erase LEBs that recorded them. 701 * @c: UBIFS file-system description object 702 * @unclean: indicates recovery from unclean unmount 703 * @read_only: indicates read only mount 704 * 705 * This function is called when mounting to erase orphans from the previous 706 * session. If UBIFS was not unmounted cleanly, then the inodes recorded as 707 * orphans are deleted. 708 */ 709 int ubifs_mount_orphans(struct ubifs_info *c, int unclean, int read_only) 710 { 711 int err = 0; 712 713 c->max_orphans = tot_avail_orphs(c); 714 715 if (!read_only) { 716 c->orph_buf = vmalloc(c->leb_size); 717 if (!c->orph_buf) 718 return -ENOMEM; 719 } 720 721 if (unclean) 722 err = kill_orphans(c); 723 else if (!read_only) 724 err = ubifs_clear_orphans(c); 725 726 return err; 727 } 728 729 /* 730 * Everything below is related to debugging. 731 */ 732 733 struct check_orphan { 734 struct rb_node rb; 735 ino_t inum; 736 }; 737 738 struct check_info { 739 unsigned long last_ino; 740 unsigned long tot_inos; 741 unsigned long missing; 742 unsigned long long leaf_cnt; 743 struct ubifs_ino_node *node; 744 struct rb_root root; 745 }; 746 747 static int dbg_find_orphan(struct ubifs_info *c, ino_t inum) 748 { 749 struct ubifs_orphan *o; 750 struct rb_node *p; 751 752 spin_lock(&c->orphan_lock); 753 p = c->orph_tree.rb_node; 754 while (p) { 755 o = rb_entry(p, struct ubifs_orphan, rb); 756 if (inum < o->inum) 757 p = p->rb_left; 758 else if (inum > o->inum) 759 p = p->rb_right; 760 else { 761 spin_unlock(&c->orphan_lock); 762 return 1; 763 } 764 } 765 spin_unlock(&c->orphan_lock); 766 return 0; 767 } 768 769 static int dbg_ins_check_orphan(struct rb_root *root, ino_t inum) 770 { 771 struct check_orphan *orphan, *o; 772 struct rb_node **p, *parent = NULL; 773 774 orphan = kzalloc(sizeof(struct check_orphan), GFP_NOFS); 775 if (!orphan) 776 return -ENOMEM; 777 orphan->inum = inum; 778 779 p = &root->rb_node; 780 while (*p) { 781 parent = *p; 782 o = rb_entry(parent, struct check_orphan, rb); 783 if (inum < o->inum) 784 p = &(*p)->rb_left; 785 else if (inum > o->inum) 786 p = &(*p)->rb_right; 787 else { 788 kfree(orphan); 789 return 0; 790 } 791 } 792 rb_link_node(&orphan->rb, parent, p); 793 rb_insert_color(&orphan->rb, root); 794 return 0; 795 } 796 797 static int dbg_find_check_orphan(struct rb_root *root, ino_t inum) 798 { 799 struct check_orphan *o; 800 struct rb_node *p; 801 802 p = root->rb_node; 803 while (p) { 804 o = rb_entry(p, struct check_orphan, rb); 805 if (inum < o->inum) 806 p = p->rb_left; 807 else if (inum > o->inum) 808 p = p->rb_right; 809 else 810 return 1; 811 } 812 return 0; 813 } 814 815 static void dbg_free_check_tree(struct rb_root *root) 816 { 817 struct check_orphan *o, *n; 818 819 rbtree_postorder_for_each_entry_safe(o, n, root, rb) 820 kfree(o); 821 } 822 823 static int dbg_orphan_check(struct ubifs_info *c, struct ubifs_zbranch *zbr, 824 void *priv) 825 { 826 struct check_info *ci = priv; 827 ino_t inum; 828 int err; 829 830 inum = key_inum(c, &zbr->key); 831 if (inum != ci->last_ino) { 832 /* Lowest node type is the inode node, so it comes first */ 833 if (key_type(c, &zbr->key) != UBIFS_INO_KEY) 834 ubifs_err("found orphan node ino %lu, type %d", 835 (unsigned long)inum, key_type(c, &zbr->key)); 836 ci->last_ino = inum; 837 ci->tot_inos += 1; 838 err = ubifs_tnc_read_node(c, zbr, ci->node); 839 if (err) { 840 ubifs_err("node read failed, error %d", err); 841 return err; 842 } 843 if (ci->node->nlink == 0) 844 /* Must be recorded as an orphan */ 845 if (!dbg_find_check_orphan(&ci->root, inum) && 846 !dbg_find_orphan(c, inum)) { 847 ubifs_err("missing orphan, ino %lu", 848 (unsigned long)inum); 849 ci->missing += 1; 850 } 851 } 852 ci->leaf_cnt += 1; 853 return 0; 854 } 855 856 static int dbg_read_orphans(struct check_info *ci, struct ubifs_scan_leb *sleb) 857 { 858 struct ubifs_scan_node *snod; 859 struct ubifs_orph_node *orph; 860 ino_t inum; 861 int i, n, err; 862 863 list_for_each_entry(snod, &sleb->nodes, list) { 864 cond_resched(); 865 if (snod->type != UBIFS_ORPH_NODE) 866 continue; 867 orph = snod->node; 868 n = (le32_to_cpu(orph->ch.len) - UBIFS_ORPH_NODE_SZ) >> 3; 869 for (i = 0; i < n; i++) { 870 inum = le64_to_cpu(orph->inos[i]); 871 err = dbg_ins_check_orphan(&ci->root, inum); 872 if (err) 873 return err; 874 } 875 } 876 return 0; 877 } 878 879 static int dbg_scan_orphans(struct ubifs_info *c, struct check_info *ci) 880 { 881 int lnum, err = 0; 882 void *buf; 883 884 /* Check no-orphans flag and skip this if no orphans */ 885 if (c->no_orphs) 886 return 0; 887 888 buf = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL); 889 if (!buf) { 890 ubifs_err("cannot allocate memory to check orphans"); 891 return 0; 892 } 893 894 for (lnum = c->orph_first; lnum <= c->orph_last; lnum++) { 895 struct ubifs_scan_leb *sleb; 896 897 sleb = ubifs_scan(c, lnum, 0, buf, 0); 898 if (IS_ERR(sleb)) { 899 err = PTR_ERR(sleb); 900 break; 901 } 902 903 err = dbg_read_orphans(ci, sleb); 904 ubifs_scan_destroy(sleb); 905 if (err) 906 break; 907 } 908 909 vfree(buf); 910 return err; 911 } 912 913 static int dbg_check_orphans(struct ubifs_info *c) 914 { 915 struct check_info ci; 916 int err; 917 918 if (!dbg_is_chk_orph(c)) 919 return 0; 920 921 ci.last_ino = 0; 922 ci.tot_inos = 0; 923 ci.missing = 0; 924 ci.leaf_cnt = 0; 925 ci.root = RB_ROOT; 926 ci.node = kmalloc(UBIFS_MAX_INO_NODE_SZ, GFP_NOFS); 927 if (!ci.node) { 928 ubifs_err("out of memory"); 929 return -ENOMEM; 930 } 931 932 err = dbg_scan_orphans(c, &ci); 933 if (err) 934 goto out; 935 936 err = dbg_walk_index(c, &dbg_orphan_check, NULL, &ci); 937 if (err) { 938 ubifs_err("cannot scan TNC, error %d", err); 939 goto out; 940 } 941 942 if (ci.missing) { 943 ubifs_err("%lu missing orphan(s)", ci.missing); 944 err = -EINVAL; 945 goto out; 946 } 947 948 dbg_cmt("last inode number is %lu", ci.last_ino); 949 dbg_cmt("total number of inodes is %lu", ci.tot_inos); 950 dbg_cmt("total number of leaf nodes is %llu", ci.leaf_cnt); 951 952 out: 953 dbg_free_check_tree(&ci.root); 954 kfree(ci.node); 955 return err; 956 } 957