cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

orphan.c (26837B)


      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}