Linux Audio

Check our new training course

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