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