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