nvme: optimise io_uring passthrough completion
[linux-block.git] / fs / ubifs / tnc.c
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  * Authors: Adrian Hunter
8  *          Artem Bityutskiy (Битюцкий Артём)
9  */
10
11 /*
12  * This file implements TNC (Tree Node Cache) which caches indexing nodes of
13  * the UBIFS B-tree.
14  *
15  * At the moment the locking rules of the TNC tree are quite simple and
16  * straightforward. We just have a mutex and lock it when we traverse the
17  * tree. If a znode is not in memory, we read it from flash while still having
18  * the mutex locked.
19  */
20
21 #include <linux/crc32.h>
22 #include <linux/slab.h>
23 #include "ubifs.h"
24
25 static int try_read_node(const struct ubifs_info *c, void *buf, int type,
26                          struct ubifs_zbranch *zbr);
27 static int fallible_read_node(struct ubifs_info *c, const union ubifs_key *key,
28                               struct ubifs_zbranch *zbr, void *node);
29
30 /*
31  * Returned codes of 'matches_name()' and 'fallible_matches_name()' functions.
32  * @NAME_LESS: name corresponding to the first argument is less than second
33  * @NAME_MATCHES: names match
34  * @NAME_GREATER: name corresponding to the second argument is greater than
35  *                first
36  * @NOT_ON_MEDIA: node referred by zbranch does not exist on the media
37  *
38  * These constants were introduce to improve readability.
39  */
40 enum {
41         NAME_LESS    = 0,
42         NAME_MATCHES = 1,
43         NAME_GREATER = 2,
44         NOT_ON_MEDIA = 3,
45 };
46
47 static void do_insert_old_idx(struct ubifs_info *c,
48                               struct ubifs_old_idx *old_idx)
49 {
50         struct ubifs_old_idx *o;
51         struct rb_node **p, *parent = NULL;
52
53         p = &c->old_idx.rb_node;
54         while (*p) {
55                 parent = *p;
56                 o = rb_entry(parent, struct ubifs_old_idx, rb);
57                 if (old_idx->lnum < o->lnum)
58                         p = &(*p)->rb_left;
59                 else if (old_idx->lnum > o->lnum)
60                         p = &(*p)->rb_right;
61                 else if (old_idx->offs < o->offs)
62                         p = &(*p)->rb_left;
63                 else if (old_idx->offs > o->offs)
64                         p = &(*p)->rb_right;
65                 else {
66                         ubifs_err(c, "old idx added twice!");
67                         kfree(old_idx);
68                 }
69         }
70         rb_link_node(&old_idx->rb, parent, p);
71         rb_insert_color(&old_idx->rb, &c->old_idx);
72 }
73
74 /**
75  * insert_old_idx - record an index node obsoleted since the last commit start.
76  * @c: UBIFS file-system description object
77  * @lnum: LEB number of obsoleted index node
78  * @offs: offset of obsoleted index node
79  *
80  * Returns %0 on success, and a negative error code on failure.
81  *
82  * For recovery, there must always be a complete intact version of the index on
83  * flash at all times. That is called the "old index". It is the index as at the
84  * time of the last successful commit. Many of the index nodes in the old index
85  * may be dirty, but they must not be erased until the next successful commit
86  * (at which point that index becomes the old index).
87  *
88  * That means that the garbage collection and the in-the-gaps method of
89  * committing must be able to determine if an index node is in the old index.
90  * Most of the old index nodes can be found by looking up the TNC using the
91  * 'lookup_znode()' function. However, some of the old index nodes may have
92  * been deleted from the current index or may have been changed so much that
93  * they cannot be easily found. In those cases, an entry is added to an RB-tree.
94  * That is what this function does. The RB-tree is ordered by LEB number and
95  * offset because they uniquely identify the old index node.
96  */
97 static int insert_old_idx(struct ubifs_info *c, int lnum, int offs)
98 {
99         struct ubifs_old_idx *old_idx;
100
101         old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS);
102         if (unlikely(!old_idx))
103                 return -ENOMEM;
104         old_idx->lnum = lnum;
105         old_idx->offs = offs;
106         do_insert_old_idx(c, old_idx);
107
108         return 0;
109 }
110
111 /**
112  * insert_old_idx_znode - record a znode obsoleted since last commit start.
113  * @c: UBIFS file-system description object
114  * @znode: znode of obsoleted index node
115  *
116  * Returns %0 on success, and a negative error code on failure.
117  */
118 int insert_old_idx_znode(struct ubifs_info *c, struct ubifs_znode *znode)
119 {
120         if (znode->parent) {
121                 struct ubifs_zbranch *zbr;
122
123                 zbr = &znode->parent->zbranch[znode->iip];
124                 if (zbr->len)
125                         return insert_old_idx(c, zbr->lnum, zbr->offs);
126         } else
127                 if (c->zroot.len)
128                         return insert_old_idx(c, c->zroot.lnum,
129                                               c->zroot.offs);
130         return 0;
131 }
132
133 /**
134  * ins_clr_old_idx_znode - record a znode obsoleted since last commit start.
135  * @c: UBIFS file-system description object
136  * @znode: znode of obsoleted index node
137  *
138  * Returns %0 on success, and a negative error code on failure.
139  */
140 static int ins_clr_old_idx_znode(struct ubifs_info *c,
141                                  struct ubifs_znode *znode)
142 {
143         int err;
144
145         if (znode->parent) {
146                 struct ubifs_zbranch *zbr;
147
148                 zbr = &znode->parent->zbranch[znode->iip];
149                 if (zbr->len) {
150                         err = insert_old_idx(c, zbr->lnum, zbr->offs);
151                         if (err)
152                                 return err;
153                         zbr->lnum = 0;
154                         zbr->offs = 0;
155                         zbr->len = 0;
156                 }
157         } else
158                 if (c->zroot.len) {
159                         err = insert_old_idx(c, c->zroot.lnum, c->zroot.offs);
160                         if (err)
161                                 return err;
162                         c->zroot.lnum = 0;
163                         c->zroot.offs = 0;
164                         c->zroot.len = 0;
165                 }
166         return 0;
167 }
168
169 /**
170  * destroy_old_idx - destroy the old_idx RB-tree.
171  * @c: UBIFS file-system description object
172  *
173  * During start commit, the old_idx RB-tree is used to avoid overwriting index
174  * nodes that were in the index last commit but have since been deleted.  This
175  * is necessary for recovery i.e. the old index must be kept intact until the
176  * new index is successfully written.  The old-idx RB-tree is used for the
177  * in-the-gaps method of writing index nodes and is destroyed every commit.
178  */
179 void destroy_old_idx(struct ubifs_info *c)
180 {
181         struct ubifs_old_idx *old_idx, *n;
182
183         rbtree_postorder_for_each_entry_safe(old_idx, n, &c->old_idx, rb)
184                 kfree(old_idx);
185
186         c->old_idx = RB_ROOT;
187 }
188
189 /**
190  * copy_znode - copy a dirty znode.
191  * @c: UBIFS file-system description object
192  * @znode: znode to copy
193  *
194  * A dirty znode being committed may not be changed, so it is copied.
195  */
196 static struct ubifs_znode *copy_znode(struct ubifs_info *c,
197                                       struct ubifs_znode *znode)
198 {
199         struct ubifs_znode *zn;
200
201         zn = kmemdup(znode, c->max_znode_sz, GFP_NOFS);
202         if (unlikely(!zn))
203                 return ERR_PTR(-ENOMEM);
204
205         zn->cnext = NULL;
206         __set_bit(DIRTY_ZNODE, &zn->flags);
207         __clear_bit(COW_ZNODE, &zn->flags);
208
209         return zn;
210 }
211
212 /**
213  * add_idx_dirt - add dirt due to a dirty znode.
214  * @c: UBIFS file-system description object
215  * @lnum: LEB number of index node
216  * @dirt: size of index node
217  *
218  * This function updates lprops dirty space and the new size of the index.
219  */
220 static int add_idx_dirt(struct ubifs_info *c, int lnum, int dirt)
221 {
222         c->calc_idx_sz -= ALIGN(dirt, 8);
223         return ubifs_add_dirt(c, lnum, dirt);
224 }
225
226 /**
227  * replace_znode - replace old znode with new znode.
228  * @c: UBIFS file-system description object
229  * @new_zn: new znode
230  * @old_zn: old znode
231  * @zbr: the branch of parent znode
232  *
233  * Replace old znode with new znode in TNC.
234  */
235 static void replace_znode(struct ubifs_info *c, struct ubifs_znode *new_zn,
236                           struct ubifs_znode *old_zn, struct ubifs_zbranch *zbr)
237 {
238         ubifs_assert(c, !ubifs_zn_obsolete(old_zn));
239         __set_bit(OBSOLETE_ZNODE, &old_zn->flags);
240
241         if (old_zn->level != 0) {
242                 int i;
243                 const int n = new_zn->child_cnt;
244
245                 /* The children now have new parent */
246                 for (i = 0; i < n; i++) {
247                         struct ubifs_zbranch *child = &new_zn->zbranch[i];
248
249                         if (child->znode)
250                                 child->znode->parent = new_zn;
251                 }
252         }
253
254         zbr->znode = new_zn;
255         zbr->lnum = 0;
256         zbr->offs = 0;
257         zbr->len = 0;
258
259         atomic_long_inc(&c->dirty_zn_cnt);
260 }
261
262 /**
263  * dirty_cow_znode - ensure a znode is not being committed.
264  * @c: UBIFS file-system description object
265  * @zbr: branch of znode to check
266  *
267  * Returns dirtied znode on success or negative error code on failure.
268  */
269 static struct ubifs_znode *dirty_cow_znode(struct ubifs_info *c,
270                                            struct ubifs_zbranch *zbr)
271 {
272         struct ubifs_znode *znode = zbr->znode;
273         struct ubifs_znode *zn;
274         int err;
275
276         if (!ubifs_zn_cow(znode)) {
277                 /* znode is not being committed */
278                 if (!test_and_set_bit(DIRTY_ZNODE, &znode->flags)) {
279                         atomic_long_inc(&c->dirty_zn_cnt);
280                         atomic_long_dec(&c->clean_zn_cnt);
281                         atomic_long_dec(&ubifs_clean_zn_cnt);
282                         err = add_idx_dirt(c, zbr->lnum, zbr->len);
283                         if (unlikely(err))
284                                 return ERR_PTR(err);
285                 }
286                 return znode;
287         }
288
289         zn = copy_znode(c, znode);
290         if (IS_ERR(zn))
291                 return zn;
292
293         if (zbr->len) {
294                 struct ubifs_old_idx *old_idx;
295
296                 old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS);
297                 if (unlikely(!old_idx)) {
298                         err = -ENOMEM;
299                         goto out;
300                 }
301                 old_idx->lnum = zbr->lnum;
302                 old_idx->offs = zbr->offs;
303
304                 err = add_idx_dirt(c, zbr->lnum, zbr->len);
305                 if (err) {
306                         kfree(old_idx);
307                         goto out;
308                 }
309
310                 do_insert_old_idx(c, old_idx);
311         }
312
313         replace_znode(c, zn, znode, zbr);
314
315         return zn;
316
317 out:
318         kfree(zn);
319         return ERR_PTR(err);
320 }
321
322 /**
323  * lnc_add - add a leaf node to the leaf node cache.
324  * @c: UBIFS file-system description object
325  * @zbr: zbranch of leaf node
326  * @node: leaf node
327  *
328  * Leaf nodes are non-index nodes directory entry nodes or data nodes. The
329  * purpose of the leaf node cache is to save re-reading the same leaf node over
330  * and over again. Most things are cached by VFS, however the file system must
331  * cache directory entries for readdir and for resolving hash collisions. The
332  * present implementation of the leaf node cache is extremely simple, and
333  * allows for error returns that are not used but that may be needed if a more
334  * complex implementation is created.
335  *
336  * Note, this function does not add the @node object to LNC directly, but
337  * allocates a copy of the object and adds the copy to LNC. The reason for this
338  * is that @node has been allocated outside of the TNC subsystem and will be
339  * used with @c->tnc_mutex unlock upon return from the TNC subsystem. But LNC
340  * may be changed at any time, e.g. freed by the shrinker.
341  */
342 static int lnc_add(struct ubifs_info *c, struct ubifs_zbranch *zbr,
343                    const void *node)
344 {
345         int err;
346         void *lnc_node;
347         const struct ubifs_dent_node *dent = node;
348
349         ubifs_assert(c, !zbr->leaf);
350         ubifs_assert(c, zbr->len != 0);
351         ubifs_assert(c, is_hash_key(c, &zbr->key));
352
353         err = ubifs_validate_entry(c, dent);
354         if (err) {
355                 dump_stack();
356                 ubifs_dump_node(c, dent, zbr->len);
357                 return err;
358         }
359
360         lnc_node = kmemdup(node, zbr->len, GFP_NOFS);
361         if (!lnc_node)
362                 /* We don't have to have the cache, so no error */
363                 return 0;
364
365         zbr->leaf = lnc_node;
366         return 0;
367 }
368
369  /**
370  * lnc_add_directly - add a leaf node to the leaf-node-cache.
371  * @c: UBIFS file-system description object
372  * @zbr: zbranch of leaf node
373  * @node: leaf node
374  *
375  * This function is similar to 'lnc_add()', but it does not create a copy of
376  * @node but inserts @node to TNC directly.
377  */
378 static int lnc_add_directly(struct ubifs_info *c, struct ubifs_zbranch *zbr,
379                             void *node)
380 {
381         int err;
382
383         ubifs_assert(c, !zbr->leaf);
384         ubifs_assert(c, zbr->len != 0);
385
386         err = ubifs_validate_entry(c, node);
387         if (err) {
388                 dump_stack();
389                 ubifs_dump_node(c, node, zbr->len);
390                 return err;
391         }
392
393         zbr->leaf = node;
394         return 0;
395 }
396
397 /**
398  * lnc_free - remove a leaf node from the leaf node cache.
399  * @zbr: zbranch of leaf node
400  */
401 static void lnc_free(struct ubifs_zbranch *zbr)
402 {
403         if (!zbr->leaf)
404                 return;
405         kfree(zbr->leaf);
406         zbr->leaf = NULL;
407 }
408
409 /**
410  * tnc_read_hashed_node - read a "hashed" leaf node.
411  * @c: UBIFS file-system description object
412  * @zbr: key and position of the node
413  * @node: node is returned here
414  *
415  * This function reads a "hashed" node defined by @zbr from the leaf node cache
416  * (in it is there) or from the hash media, in which case the node is also
417  * added to LNC. Returns zero in case of success or a negative error
418  * code in case of failure.
419  */
420 static int tnc_read_hashed_node(struct ubifs_info *c, struct ubifs_zbranch *zbr,
421                                 void *node)
422 {
423         int err;
424
425         ubifs_assert(c, is_hash_key(c, &zbr->key));
426
427         if (zbr->leaf) {
428                 /* Read from the leaf node cache */
429                 ubifs_assert(c, zbr->len != 0);
430                 memcpy(node, zbr->leaf, zbr->len);
431                 return 0;
432         }
433
434         if (c->replaying) {
435                 err = fallible_read_node(c, &zbr->key, zbr, node);
436                 /*
437                  * When the node was not found, return -ENOENT, 0 otherwise.
438                  * Negative return codes stay as-is.
439                  */
440                 if (err == 0)
441                         err = -ENOENT;
442                 else if (err == 1)
443                         err = 0;
444         } else {
445                 err = ubifs_tnc_read_node(c, zbr, node);
446         }
447         if (err)
448                 return err;
449
450         /* Add the node to the leaf node cache */
451         err = lnc_add(c, zbr, node);
452         return err;
453 }
454
455 /**
456  * try_read_node - read a node if it is a node.
457  * @c: UBIFS file-system description object
458  * @buf: buffer to read to
459  * @type: node type
460  * @zbr: the zbranch describing the node to read
461  *
462  * This function tries to read a node of known type and length, checks it and
463  * stores it in @buf. This function returns %1 if a node is present and %0 if
464  * a node is not present. A negative error code is returned for I/O errors.
465  * This function performs that same function as ubifs_read_node except that
466  * it does not require that there is actually a node present and instead
467  * the return code indicates if a node was read.
468  *
469  * Note, this function does not check CRC of data nodes if @c->no_chk_data_crc
470  * is true (it is controlled by corresponding mount option). However, if
471  * @c->mounting or @c->remounting_rw is true (we are mounting or re-mounting to
472  * R/W mode), @c->no_chk_data_crc is ignored and CRC is checked. This is
473  * because during mounting or re-mounting from R/O mode to R/W mode we may read
474  * journal nodes (when replying the journal or doing the recovery) and the
475  * journal nodes may potentially be corrupted, so checking is required.
476  */
477 static int try_read_node(const struct ubifs_info *c, void *buf, int type,
478                          struct ubifs_zbranch *zbr)
479 {
480         int len = zbr->len;
481         int lnum = zbr->lnum;
482         int offs = zbr->offs;
483         int err, node_len;
484         struct ubifs_ch *ch = buf;
485         uint32_t crc, node_crc;
486
487         dbg_io("LEB %d:%d, %s, length %d", lnum, offs, dbg_ntype(type), len);
488
489         err = ubifs_leb_read(c, lnum, buf, offs, len, 1);
490         if (err) {
491                 ubifs_err(c, "cannot read node type %d from LEB %d:%d, error %d",
492                           type, lnum, offs, err);
493                 return err;
494         }
495
496         if (le32_to_cpu(ch->magic) != UBIFS_NODE_MAGIC)
497                 return 0;
498
499         if (ch->node_type != type)
500                 return 0;
501
502         node_len = le32_to_cpu(ch->len);
503         if (node_len != len)
504                 return 0;
505
506         if (type != UBIFS_DATA_NODE || !c->no_chk_data_crc || c->mounting ||
507             c->remounting_rw) {
508                 crc = crc32(UBIFS_CRC32_INIT, buf + 8, node_len - 8);
509                 node_crc = le32_to_cpu(ch->crc);
510                 if (crc != node_crc)
511                         return 0;
512         }
513
514         err = ubifs_node_check_hash(c, buf, zbr->hash);
515         if (err) {
516                 ubifs_bad_hash(c, buf, zbr->hash, lnum, offs);
517                 return 0;
518         }
519
520         return 1;
521 }
522
523 /**
524  * fallible_read_node - try to read a leaf node.
525  * @c: UBIFS file-system description object
526  * @key:  key of node to read
527  * @zbr:  position of node
528  * @node: node returned
529  *
530  * This function tries to read a node and returns %1 if the node is read, %0
531  * if the node is not present, and a negative error code in the case of error.
532  */
533 static int fallible_read_node(struct ubifs_info *c, const union ubifs_key *key,
534                               struct ubifs_zbranch *zbr, void *node)
535 {
536         int ret;
537
538         dbg_tnck(key, "LEB %d:%d, key ", zbr->lnum, zbr->offs);
539
540         ret = try_read_node(c, node, key_type(c, key), zbr);
541         if (ret == 1) {
542                 union ubifs_key node_key;
543                 struct ubifs_dent_node *dent = node;
544
545                 /* All nodes have key in the same place */
546                 key_read(c, &dent->key, &node_key);
547                 if (keys_cmp(c, key, &node_key) != 0)
548                         ret = 0;
549         }
550         if (ret == 0 && c->replaying)
551                 dbg_mntk(key, "dangling branch LEB %d:%d len %d, key ",
552                         zbr->lnum, zbr->offs, zbr->len);
553         return ret;
554 }
555
556 /**
557  * matches_name - determine if a direntry or xattr entry matches a given name.
558  * @c: UBIFS file-system description object
559  * @zbr: zbranch of dent
560  * @nm: name to match
561  *
562  * This function checks if xentry/direntry referred by zbranch @zbr matches name
563  * @nm. Returns %NAME_MATCHES if it does, %NAME_LESS if the name referred by
564  * @zbr is less than @nm, and %NAME_GREATER if it is greater than @nm. In case
565  * of failure, a negative error code is returned.
566  */
567 static int matches_name(struct ubifs_info *c, struct ubifs_zbranch *zbr,
568                         const struct fscrypt_name *nm)
569 {
570         struct ubifs_dent_node *dent;
571         int nlen, err;
572
573         /* If possible, match against the dent in the leaf node cache */
574         if (!zbr->leaf) {
575                 dent = kmalloc(zbr->len, GFP_NOFS);
576                 if (!dent)
577                         return -ENOMEM;
578
579                 err = ubifs_tnc_read_node(c, zbr, dent);
580                 if (err)
581                         goto out_free;
582
583                 /* Add the node to the leaf node cache */
584                 err = lnc_add_directly(c, zbr, dent);
585                 if (err)
586                         goto out_free;
587         } else
588                 dent = zbr->leaf;
589
590         nlen = le16_to_cpu(dent->nlen);
591         err = memcmp(dent->name, fname_name(nm), min_t(int, nlen, fname_len(nm)));
592         if (err == 0) {
593                 if (nlen == fname_len(nm))
594                         return NAME_MATCHES;
595                 else if (nlen < fname_len(nm))
596                         return NAME_LESS;
597                 else
598                         return NAME_GREATER;
599         } else if (err < 0)
600                 return NAME_LESS;
601         else
602                 return NAME_GREATER;
603
604 out_free:
605         kfree(dent);
606         return err;
607 }
608
609 /**
610  * get_znode - get a TNC znode that may not be loaded yet.
611  * @c: UBIFS file-system description object
612  * @znode: parent znode
613  * @n: znode branch slot number
614  *
615  * This function returns the znode or a negative error code.
616  */
617 static struct ubifs_znode *get_znode(struct ubifs_info *c,
618                                      struct ubifs_znode *znode, int n)
619 {
620         struct ubifs_zbranch *zbr;
621
622         zbr = &znode->zbranch[n];
623         if (zbr->znode)
624                 znode = zbr->znode;
625         else
626                 znode = ubifs_load_znode(c, zbr, znode, n);
627         return znode;
628 }
629
630 /**
631  * tnc_next - find next TNC entry.
632  * @c: UBIFS file-system description object
633  * @zn: znode is passed and returned here
634  * @n: znode branch slot number is passed and returned here
635  *
636  * This function returns %0 if the next TNC entry is found, %-ENOENT if there is
637  * no next entry, or a negative error code otherwise.
638  */
639 static int tnc_next(struct ubifs_info *c, struct ubifs_znode **zn, int *n)
640 {
641         struct ubifs_znode *znode = *zn;
642         int nn = *n;
643
644         nn += 1;
645         if (nn < znode->child_cnt) {
646                 *n = nn;
647                 return 0;
648         }
649         while (1) {
650                 struct ubifs_znode *zp;
651
652                 zp = znode->parent;
653                 if (!zp)
654                         return -ENOENT;
655                 nn = znode->iip + 1;
656                 znode = zp;
657                 if (nn < znode->child_cnt) {
658                         znode = get_znode(c, znode, nn);
659                         if (IS_ERR(znode))
660                                 return PTR_ERR(znode);
661                         while (znode->level != 0) {
662                                 znode = get_znode(c, znode, 0);
663                                 if (IS_ERR(znode))
664                                         return PTR_ERR(znode);
665                         }
666                         nn = 0;
667                         break;
668                 }
669         }
670         *zn = znode;
671         *n = nn;
672         return 0;
673 }
674
675 /**
676  * tnc_prev - find previous TNC entry.
677  * @c: UBIFS file-system description object
678  * @zn: znode is returned here
679  * @n: znode branch slot number is passed and returned here
680  *
681  * This function returns %0 if the previous TNC entry is found, %-ENOENT if
682  * there is no next entry, or a negative error code otherwise.
683  */
684 static int tnc_prev(struct ubifs_info *c, struct ubifs_znode **zn, int *n)
685 {
686         struct ubifs_znode *znode = *zn;
687         int nn = *n;
688
689         if (nn > 0) {
690                 *n = nn - 1;
691                 return 0;
692         }
693         while (1) {
694                 struct ubifs_znode *zp;
695
696                 zp = znode->parent;
697                 if (!zp)
698                         return -ENOENT;
699                 nn = znode->iip - 1;
700                 znode = zp;
701                 if (nn >= 0) {
702                         znode = get_znode(c, znode, nn);
703                         if (IS_ERR(znode))
704                                 return PTR_ERR(znode);
705                         while (znode->level != 0) {
706                                 nn = znode->child_cnt - 1;
707                                 znode = get_znode(c, znode, nn);
708                                 if (IS_ERR(znode))
709                                         return PTR_ERR(znode);
710                         }
711                         nn = znode->child_cnt - 1;
712                         break;
713                 }
714         }
715         *zn = znode;
716         *n = nn;
717         return 0;
718 }
719
720 /**
721  * resolve_collision - resolve a collision.
722  * @c: UBIFS file-system description object
723  * @key: key of a directory or extended attribute entry
724  * @zn: znode is returned here
725  * @n: zbranch number is passed and returned here
726  * @nm: name of the entry
727  *
728  * This function is called for "hashed" keys to make sure that the found key
729  * really corresponds to the looked up node (directory or extended attribute
730  * entry). It returns %1 and sets @zn and @n if the collision is resolved.
731  * %0 is returned if @nm is not found and @zn and @n are set to the previous
732  * entry, i.e. to the entry after which @nm could follow if it were in TNC.
733  * This means that @n may be set to %-1 if the leftmost key in @zn is the
734  * previous one. A negative error code is returned on failures.
735  */
736 static int resolve_collision(struct ubifs_info *c, const union ubifs_key *key,
737                              struct ubifs_znode **zn, int *n,
738                              const struct fscrypt_name *nm)
739 {
740         int err;
741
742         err = matches_name(c, &(*zn)->zbranch[*n], nm);
743         if (unlikely(err < 0))
744                 return err;
745         if (err == NAME_MATCHES)
746                 return 1;
747
748         if (err == NAME_GREATER) {
749                 /* Look left */
750                 while (1) {
751                         err = tnc_prev(c, zn, n);
752                         if (err == -ENOENT) {
753                                 ubifs_assert(c, *n == 0);
754                                 *n = -1;
755                                 return 0;
756                         }
757                         if (err < 0)
758                                 return err;
759                         if (keys_cmp(c, &(*zn)->zbranch[*n].key, key)) {
760                                 /*
761                                  * We have found the branch after which we would
762                                  * like to insert, but inserting in this znode
763                                  * may still be wrong. Consider the following 3
764                                  * znodes, in the case where we are resolving a
765                                  * collision with Key2.
766                                  *
767                                  *                  znode zp
768                                  *            ----------------------
769                                  * level 1     |  Key0  |  Key1  |
770                                  *            -----------------------
771                                  *                 |            |
772                                  *       znode za  |            |  znode zb
773                                  *          ------------      ------------
774                                  * level 0  |  Key0  |        |  Key2  |
775                                  *          ------------      ------------
776                                  *
777                                  * The lookup finds Key2 in znode zb. Lets say
778                                  * there is no match and the name is greater so
779                                  * we look left. When we find Key0, we end up
780                                  * here. If we return now, we will insert into
781                                  * znode za at slot n = 1.  But that is invalid
782                                  * according to the parent's keys.  Key2 must
783                                  * be inserted into znode zb.
784                                  *
785                                  * Note, this problem is not relevant for the
786                                  * case when we go right, because
787                                  * 'tnc_insert()' would correct the parent key.
788                                  */
789                                 if (*n == (*zn)->child_cnt - 1) {
790                                         err = tnc_next(c, zn, n);
791                                         if (err) {
792                                                 /* Should be impossible */
793                                                 ubifs_assert(c, 0);
794                                                 if (err == -ENOENT)
795                                                         err = -EINVAL;
796                                                 return err;
797                                         }
798                                         ubifs_assert(c, *n == 0);
799                                         *n = -1;
800                                 }
801                                 return 0;
802                         }
803                         err = matches_name(c, &(*zn)->zbranch[*n], nm);
804                         if (err < 0)
805                                 return err;
806                         if (err == NAME_LESS)
807                                 return 0;
808                         if (err == NAME_MATCHES)
809                                 return 1;
810                         ubifs_assert(c, err == NAME_GREATER);
811                 }
812         } else {
813                 int nn = *n;
814                 struct ubifs_znode *znode = *zn;
815
816                 /* Look right */
817                 while (1) {
818                         err = tnc_next(c, &znode, &nn);
819                         if (err == -ENOENT)
820                                 return 0;
821                         if (err < 0)
822                                 return err;
823                         if (keys_cmp(c, &znode->zbranch[nn].key, key))
824                                 return 0;
825                         err = matches_name(c, &znode->zbranch[nn], nm);
826                         if (err < 0)
827                                 return err;
828                         if (err == NAME_GREATER)
829                                 return 0;
830                         *zn = znode;
831                         *n = nn;
832                         if (err == NAME_MATCHES)
833                                 return 1;
834                         ubifs_assert(c, err == NAME_LESS);
835                 }
836         }
837 }
838
839 /**
840  * fallible_matches_name - determine if a dent matches a given name.
841  * @c: UBIFS file-system description object
842  * @zbr: zbranch of dent
843  * @nm: name to match
844  *
845  * This is a "fallible" version of 'matches_name()' function which does not
846  * panic if the direntry/xentry referred by @zbr does not exist on the media.
847  *
848  * This function checks if xentry/direntry referred by zbranch @zbr matches name
849  * @nm. Returns %NAME_MATCHES it does, %NAME_LESS if the name referred by @zbr
850  * is less than @nm, %NAME_GREATER if it is greater than @nm, and @NOT_ON_MEDIA
851  * if xentry/direntry referred by @zbr does not exist on the media. A negative
852  * error code is returned in case of failure.
853  */
854 static int fallible_matches_name(struct ubifs_info *c,
855                                  struct ubifs_zbranch *zbr,
856                                  const struct fscrypt_name *nm)
857 {
858         struct ubifs_dent_node *dent;
859         int nlen, err;
860
861         /* If possible, match against the dent in the leaf node cache */
862         if (!zbr->leaf) {
863                 dent = kmalloc(zbr->len, GFP_NOFS);
864                 if (!dent)
865                         return -ENOMEM;
866
867                 err = fallible_read_node(c, &zbr->key, zbr, dent);
868                 if (err < 0)
869                         goto out_free;
870                 if (err == 0) {
871                         /* The node was not present */
872                         err = NOT_ON_MEDIA;
873                         goto out_free;
874                 }
875                 ubifs_assert(c, err == 1);
876
877                 err = lnc_add_directly(c, zbr, dent);
878                 if (err)
879                         goto out_free;
880         } else
881                 dent = zbr->leaf;
882
883         nlen = le16_to_cpu(dent->nlen);
884         err = memcmp(dent->name, fname_name(nm), min_t(int, nlen, fname_len(nm)));
885         if (err == 0) {
886                 if (nlen == fname_len(nm))
887                         return NAME_MATCHES;
888                 else if (nlen < fname_len(nm))
889                         return NAME_LESS;
890                 else
891                         return NAME_GREATER;
892         } else if (err < 0)
893                 return NAME_LESS;
894         else
895                 return NAME_GREATER;
896
897 out_free:
898         kfree(dent);
899         return err;
900 }
901
902 /**
903  * fallible_resolve_collision - resolve a collision even if nodes are missing.
904  * @c: UBIFS file-system description object
905  * @key: key
906  * @zn: znode is returned here
907  * @n: branch number is passed and returned here
908  * @nm: name of directory entry
909  * @adding: indicates caller is adding a key to the TNC
910  *
911  * This is a "fallible" version of the 'resolve_collision()' function which
912  * does not panic if one of the nodes referred to by TNC does not exist on the
913  * media. This may happen when replaying the journal if a deleted node was
914  * Garbage-collected and the commit was not done. A branch that refers to a node
915  * that is not present is called a dangling branch. The following are the return
916  * codes for this function:
917  *  o if @nm was found, %1 is returned and @zn and @n are set to the found
918  *    branch;
919  *  o if we are @adding and @nm was not found, %0 is returned;
920  *  o if we are not @adding and @nm was not found, but a dangling branch was
921  *    found, then %1 is returned and @zn and @n are set to the dangling branch;
922  *  o a negative error code is returned in case of failure.
923  */
924 static int fallible_resolve_collision(struct ubifs_info *c,
925                                       const union ubifs_key *key,
926                                       struct ubifs_znode **zn, int *n,
927                                       const struct fscrypt_name *nm,
928                                       int adding)
929 {
930         struct ubifs_znode *o_znode = NULL, *znode = *zn;
931         int o_n, err, cmp, unsure = 0, nn = *n;
932
933         cmp = fallible_matches_name(c, &znode->zbranch[nn], nm);
934         if (unlikely(cmp < 0))
935                 return cmp;
936         if (cmp == NAME_MATCHES)
937                 return 1;
938         if (cmp == NOT_ON_MEDIA) {
939                 o_znode = znode;
940                 o_n = nn;
941                 /*
942                  * We are unlucky and hit a dangling branch straight away.
943                  * Now we do not really know where to go to find the needed
944                  * branch - to the left or to the right. Well, let's try left.
945                  */
946                 unsure = 1;
947         } else if (!adding)
948                 unsure = 1; /* Remove a dangling branch wherever it is */
949
950         if (cmp == NAME_GREATER || unsure) {
951                 /* Look left */
952                 while (1) {
953                         err = tnc_prev(c, zn, n);
954                         if (err == -ENOENT) {
955                                 ubifs_assert(c, *n == 0);
956                                 *n = -1;
957                                 break;
958                         }
959                         if (err < 0)
960                                 return err;
961                         if (keys_cmp(c, &(*zn)->zbranch[*n].key, key)) {
962                                 /* See comments in 'resolve_collision()' */
963                                 if (*n == (*zn)->child_cnt - 1) {
964                                         err = tnc_next(c, zn, n);
965                                         if (err) {
966                                                 /* Should be impossible */
967                                                 ubifs_assert(c, 0);
968                                                 if (err == -ENOENT)
969                                                         err = -EINVAL;
970                                                 return err;
971                                         }
972                                         ubifs_assert(c, *n == 0);
973                                         *n = -1;
974                                 }
975                                 break;
976                         }
977                         err = fallible_matches_name(c, &(*zn)->zbranch[*n], nm);
978                         if (err < 0)
979                                 return err;
980                         if (err == NAME_MATCHES)
981                                 return 1;
982                         if (err == NOT_ON_MEDIA) {
983                                 o_znode = *zn;
984                                 o_n = *n;
985                                 continue;
986                         }
987                         if (!adding)
988                                 continue;
989                         if (err == NAME_LESS)
990                                 break;
991                         else
992                                 unsure = 0;
993                 }
994         }
995
996         if (cmp == NAME_LESS || unsure) {
997                 /* Look right */
998                 *zn = znode;
999                 *n = nn;
1000                 while (1) {
1001                         err = tnc_next(c, &znode, &nn);
1002                         if (err == -ENOENT)
1003                                 break;
1004                         if (err < 0)
1005                                 return err;
1006                         if (keys_cmp(c, &znode->zbranch[nn].key, key))
1007                                 break;
1008                         err = fallible_matches_name(c, &znode->zbranch[nn], nm);
1009                         if (err < 0)
1010                                 return err;
1011                         if (err == NAME_GREATER)
1012                                 break;
1013                         *zn = znode;
1014                         *n = nn;
1015                         if (err == NAME_MATCHES)
1016                                 return 1;
1017                         if (err == NOT_ON_MEDIA) {
1018                                 o_znode = znode;
1019                                 o_n = nn;
1020                         }
1021                 }
1022         }
1023
1024         /* Never match a dangling branch when adding */
1025         if (adding || !o_znode)
1026                 return 0;
1027
1028         dbg_mntk(key, "dangling match LEB %d:%d len %d key ",
1029                 o_znode->zbranch[o_n].lnum, o_znode->zbranch[o_n].offs,
1030                 o_znode->zbranch[o_n].len);
1031         *zn = o_znode;
1032         *n = o_n;
1033         return 1;
1034 }
1035
1036 /**
1037  * matches_position - determine if a zbranch matches a given position.
1038  * @zbr: zbranch of dent
1039  * @lnum: LEB number of dent to match
1040  * @offs: offset of dent to match
1041  *
1042  * This function returns %1 if @lnum:@offs matches, and %0 otherwise.
1043  */
1044 static int matches_position(struct ubifs_zbranch *zbr, int lnum, int offs)
1045 {
1046         if (zbr->lnum == lnum && zbr->offs == offs)
1047                 return 1;
1048         else
1049                 return 0;
1050 }
1051
1052 /**
1053  * resolve_collision_directly - resolve a collision directly.
1054  * @c: UBIFS file-system description object
1055  * @key: key of directory entry
1056  * @zn: znode is passed and returned here
1057  * @n: zbranch number is passed and returned here
1058  * @lnum: LEB number of dent node to match
1059  * @offs: offset of dent node to match
1060  *
1061  * This function is used for "hashed" keys to make sure the found directory or
1062  * extended attribute entry node is what was looked for. It is used when the
1063  * flash address of the right node is known (@lnum:@offs) which makes it much
1064  * easier to resolve collisions (no need to read entries and match full
1065  * names). This function returns %1 and sets @zn and @n if the collision is
1066  * resolved, %0 if @lnum:@offs is not found and @zn and @n are set to the
1067  * previous directory entry. Otherwise a negative error code is returned.
1068  */
1069 static int resolve_collision_directly(struct ubifs_info *c,
1070                                       const union ubifs_key *key,
1071                                       struct ubifs_znode **zn, int *n,
1072                                       int lnum, int offs)
1073 {
1074         struct ubifs_znode *znode;
1075         int nn, err;
1076
1077         znode = *zn;
1078         nn = *n;
1079         if (matches_position(&znode->zbranch[nn], lnum, offs))
1080                 return 1;
1081
1082         /* Look left */
1083         while (1) {
1084                 err = tnc_prev(c, &znode, &nn);
1085                 if (err == -ENOENT)
1086                         break;
1087                 if (err < 0)
1088                         return err;
1089                 if (keys_cmp(c, &znode->zbranch[nn].key, key))
1090                         break;
1091                 if (matches_position(&znode->zbranch[nn], lnum, offs)) {
1092                         *zn = znode;
1093                         *n = nn;
1094                         return 1;
1095                 }
1096         }
1097
1098         /* Look right */
1099         znode = *zn;
1100         nn = *n;
1101         while (1) {
1102                 err = tnc_next(c, &znode, &nn);
1103                 if (err == -ENOENT)
1104                         return 0;
1105                 if (err < 0)
1106                         return err;
1107                 if (keys_cmp(c, &znode->zbranch[nn].key, key))
1108                         return 0;
1109                 *zn = znode;
1110                 *n = nn;
1111                 if (matches_position(&znode->zbranch[nn], lnum, offs))
1112                         return 1;
1113         }
1114 }
1115
1116 /**
1117  * dirty_cow_bottom_up - dirty a znode and its ancestors.
1118  * @c: UBIFS file-system description object
1119  * @znode: znode to dirty
1120  *
1121  * If we do not have a unique key that resides in a znode, then we cannot
1122  * dirty that znode from the top down (i.e. by using lookup_level0_dirty)
1123  * This function records the path back to the last dirty ancestor, and then
1124  * dirties the znodes on that path.
1125  */
1126 static struct ubifs_znode *dirty_cow_bottom_up(struct ubifs_info *c,
1127                                                struct ubifs_znode *znode)
1128 {
1129         struct ubifs_znode *zp;
1130         int *path = c->bottom_up_buf, p = 0;
1131
1132         ubifs_assert(c, c->zroot.znode);
1133         ubifs_assert(c, znode);
1134         if (c->zroot.znode->level > BOTTOM_UP_HEIGHT) {
1135                 kfree(c->bottom_up_buf);
1136                 c->bottom_up_buf = kmalloc_array(c->zroot.znode->level,
1137                                                  sizeof(int),
1138                                                  GFP_NOFS);
1139                 if (!c->bottom_up_buf)
1140                         return ERR_PTR(-ENOMEM);
1141                 path = c->bottom_up_buf;
1142         }
1143         if (c->zroot.znode->level) {
1144                 /* Go up until parent is dirty */
1145                 while (1) {
1146                         int n;
1147
1148                         zp = znode->parent;
1149                         if (!zp)
1150                                 break;
1151                         n = znode->iip;
1152                         ubifs_assert(c, p < c->zroot.znode->level);
1153                         path[p++] = n;
1154                         if (!zp->cnext && ubifs_zn_dirty(znode))
1155                                 break;
1156                         znode = zp;
1157                 }
1158         }
1159
1160         /* Come back down, dirtying as we go */
1161         while (1) {
1162                 struct ubifs_zbranch *zbr;
1163
1164                 zp = znode->parent;
1165                 if (zp) {
1166                         ubifs_assert(c, path[p - 1] >= 0);
1167                         ubifs_assert(c, path[p - 1] < zp->child_cnt);
1168                         zbr = &zp->zbranch[path[--p]];
1169                         znode = dirty_cow_znode(c, zbr);
1170                 } else {
1171                         ubifs_assert(c, znode == c->zroot.znode);
1172                         znode = dirty_cow_znode(c, &c->zroot);
1173                 }
1174                 if (IS_ERR(znode) || !p)
1175                         break;
1176                 ubifs_assert(c, path[p - 1] >= 0);
1177                 ubifs_assert(c, path[p - 1] < znode->child_cnt);
1178                 znode = znode->zbranch[path[p - 1]].znode;
1179         }
1180
1181         return znode;
1182 }
1183
1184 /**
1185  * ubifs_lookup_level0 - search for zero-level znode.
1186  * @c: UBIFS file-system description object
1187  * @key:  key to lookup
1188  * @zn: znode is returned here
1189  * @n: znode branch slot number is returned here
1190  *
1191  * This function looks up the TNC tree and search for zero-level znode which
1192  * refers key @key. The found zero-level znode is returned in @zn. There are 3
1193  * cases:
1194  *   o exact match, i.e. the found zero-level znode contains key @key, then %1
1195  *     is returned and slot number of the matched branch is stored in @n;
1196  *   o not exact match, which means that zero-level znode does not contain
1197  *     @key, then %0 is returned and slot number of the closest branch or %-1
1198  *     is stored in @n; In this case calling tnc_next() is mandatory.
1199  *   o @key is so small that it is even less than the lowest key of the
1200  *     leftmost zero-level node, then %0 is returned and %0 is stored in @n.
1201  *
1202  * Note, when the TNC tree is traversed, some znodes may be absent, then this
1203  * function reads corresponding indexing nodes and inserts them to TNC. In
1204  * case of failure, a negative error code is returned.
1205  */
1206 int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
1207                         struct ubifs_znode **zn, int *n)
1208 {
1209         int err, exact;
1210         struct ubifs_znode *znode;
1211         time64_t time = ktime_get_seconds();
1212
1213         dbg_tnck(key, "search key ");
1214         ubifs_assert(c, key_type(c, key) < UBIFS_INVALID_KEY);
1215
1216         znode = c->zroot.znode;
1217         if (unlikely(!znode)) {
1218                 znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
1219                 if (IS_ERR(znode))
1220                         return PTR_ERR(znode);
1221         }
1222
1223         znode->time = time;
1224
1225         while (1) {
1226                 struct ubifs_zbranch *zbr;
1227
1228                 exact = ubifs_search_zbranch(c, znode, key, n);
1229
1230                 if (znode->level == 0)
1231                         break;
1232
1233                 if (*n < 0)
1234                         *n = 0;
1235                 zbr = &znode->zbranch[*n];
1236
1237                 if (zbr->znode) {
1238                         znode->time = time;
1239                         znode = zbr->znode;
1240                         continue;
1241                 }
1242
1243                 /* znode is not in TNC cache, load it from the media */
1244                 znode = ubifs_load_znode(c, zbr, znode, *n);
1245                 if (IS_ERR(znode))
1246                         return PTR_ERR(znode);
1247         }
1248
1249         *zn = znode;
1250         if (exact || !is_hash_key(c, key) || *n != -1) {
1251                 dbg_tnc("found %d, lvl %d, n %d", exact, znode->level, *n);
1252                 return exact;
1253         }
1254
1255         /*
1256          * Here is a tricky place. We have not found the key and this is a
1257          * "hashed" key, which may collide. The rest of the code deals with
1258          * situations like this:
1259          *
1260          *                  | 3 | 5 |
1261          *                  /       \
1262          *          | 3 | 5 |      | 6 | 7 | (x)
1263          *
1264          * Or more a complex example:
1265          *
1266          *                | 1 | 5 |
1267          *                /       \
1268          *       | 1 | 3 |         | 5 | 8 |
1269          *              \           /
1270          *          | 5 | 5 |   | 6 | 7 | (x)
1271          *
1272          * In the examples, if we are looking for key "5", we may reach nodes
1273          * marked with "(x)". In this case what we have do is to look at the
1274          * left and see if there is "5" key there. If there is, we have to
1275          * return it.
1276          *
1277          * Note, this whole situation is possible because we allow to have
1278          * elements which are equivalent to the next key in the parent in the
1279          * children of current znode. For example, this happens if we split a
1280          * znode like this: | 3 | 5 | 5 | 6 | 7 |, which results in something
1281          * like this:
1282          *                      | 3 | 5 |
1283          *                       /     \
1284          *                | 3 | 5 |   | 5 | 6 | 7 |
1285          *                              ^
1286          * And this becomes what is at the first "picture" after key "5" marked
1287          * with "^" is removed. What could be done is we could prohibit
1288          * splitting in the middle of the colliding sequence. Also, when
1289          * removing the leftmost key, we would have to correct the key of the
1290          * parent node, which would introduce additional complications. Namely,
1291          * if we changed the leftmost key of the parent znode, the garbage
1292          * collector would be unable to find it (GC is doing this when GC'ing
1293          * indexing LEBs). Although we already have an additional RB-tree where
1294          * we save such changed znodes (see 'ins_clr_old_idx_znode()') until
1295          * after the commit. But anyway, this does not look easy to implement
1296          * so we did not try this.
1297          */
1298         err = tnc_prev(c, &znode, n);
1299         if (err == -ENOENT) {
1300                 dbg_tnc("found 0, lvl %d, n -1", znode->level);
1301                 *n = -1;
1302                 return 0;
1303         }
1304         if (unlikely(err < 0))
1305                 return err;
1306         if (keys_cmp(c, key, &znode->zbranch[*n].key)) {
1307                 dbg_tnc("found 0, lvl %d, n -1", znode->level);
1308                 *n = -1;
1309                 return 0;
1310         }
1311
1312         dbg_tnc("found 1, lvl %d, n %d", znode->level, *n);
1313         *zn = znode;
1314         return 1;
1315 }
1316
1317 /**
1318  * lookup_level0_dirty - search for zero-level znode dirtying.
1319  * @c: UBIFS file-system description object
1320  * @key:  key to lookup
1321  * @zn: znode is returned here
1322  * @n: znode branch slot number is returned here
1323  *
1324  * This function looks up the TNC tree and search for zero-level znode which
1325  * refers key @key. The found zero-level znode is returned in @zn. There are 3
1326  * cases:
1327  *   o exact match, i.e. the found zero-level znode contains key @key, then %1
1328  *     is returned and slot number of the matched branch is stored in @n;
1329  *   o not exact match, which means that zero-level znode does not contain @key
1330  *     then %0 is returned and slot number of the closed branch is stored in
1331  *     @n;
1332  *   o @key is so small that it is even less than the lowest key of the
1333  *     leftmost zero-level node, then %0 is returned and %-1 is stored in @n.
1334  *
1335  * Additionally all znodes in the path from the root to the located zero-level
1336  * znode are marked as dirty.
1337  *
1338  * Note, when the TNC tree is traversed, some znodes may be absent, then this
1339  * function reads corresponding indexing nodes and inserts them to TNC. In
1340  * case of failure, a negative error code is returned.
1341  */
1342 static int lookup_level0_dirty(struct ubifs_info *c, const union ubifs_key *key,
1343                                struct ubifs_znode **zn, int *n)
1344 {
1345         int err, exact;
1346         struct ubifs_znode *znode;
1347         time64_t time = ktime_get_seconds();
1348
1349         dbg_tnck(key, "search and dirty key ");
1350
1351         znode = c->zroot.znode;
1352         if (unlikely(!znode)) {
1353                 znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
1354                 if (IS_ERR(znode))
1355                         return PTR_ERR(znode);
1356         }
1357
1358         znode = dirty_cow_znode(c, &c->zroot);
1359         if (IS_ERR(znode))
1360                 return PTR_ERR(znode);
1361
1362         znode->time = time;
1363
1364         while (1) {
1365                 struct ubifs_zbranch *zbr;
1366
1367                 exact = ubifs_search_zbranch(c, znode, key, n);
1368
1369                 if (znode->level == 0)
1370                         break;
1371
1372                 if (*n < 0)
1373                         *n = 0;
1374                 zbr = &znode->zbranch[*n];
1375
1376                 if (zbr->znode) {
1377                         znode->time = time;
1378                         znode = dirty_cow_znode(c, zbr);
1379                         if (IS_ERR(znode))
1380                                 return PTR_ERR(znode);
1381                         continue;
1382                 }
1383
1384                 /* znode is not in TNC cache, load it from the media */
1385                 znode = ubifs_load_znode(c, zbr, znode, *n);
1386                 if (IS_ERR(znode))
1387                         return PTR_ERR(znode);
1388                 znode = dirty_cow_znode(c, zbr);
1389                 if (IS_ERR(znode))
1390                         return PTR_ERR(znode);
1391         }
1392
1393         *zn = znode;
1394         if (exact || !is_hash_key(c, key) || *n != -1) {
1395                 dbg_tnc("found %d, lvl %d, n %d", exact, znode->level, *n);
1396                 return exact;
1397         }
1398
1399         /*
1400          * See huge comment at 'lookup_level0_dirty()' what is the rest of the
1401          * code.
1402          */
1403         err = tnc_prev(c, &znode, n);
1404         if (err == -ENOENT) {
1405                 *n = -1;
1406                 dbg_tnc("found 0, lvl %d, n -1", znode->level);
1407                 return 0;
1408         }
1409         if (unlikely(err < 0))
1410                 return err;
1411         if (keys_cmp(c, key, &znode->zbranch[*n].key)) {
1412                 *n = -1;
1413                 dbg_tnc("found 0, lvl %d, n -1", znode->level);
1414                 return 0;
1415         }
1416
1417         if (znode->cnext || !ubifs_zn_dirty(znode)) {
1418                 znode = dirty_cow_bottom_up(c, znode);
1419                 if (IS_ERR(znode))
1420                         return PTR_ERR(znode);
1421         }
1422
1423         dbg_tnc("found 1, lvl %d, n %d", znode->level, *n);
1424         *zn = znode;
1425         return 1;
1426 }
1427
1428 /**
1429  * maybe_leb_gced - determine if a LEB may have been garbage collected.
1430  * @c: UBIFS file-system description object
1431  * @lnum: LEB number
1432  * @gc_seq1: garbage collection sequence number
1433  *
1434  * This function determines if @lnum may have been garbage collected since
1435  * sequence number @gc_seq1. If it may have been then %1 is returned, otherwise
1436  * %0 is returned.
1437  */
1438 static int maybe_leb_gced(struct ubifs_info *c, int lnum, int gc_seq1)
1439 {
1440         int gc_seq2, gced_lnum;
1441
1442         gced_lnum = c->gced_lnum;
1443         smp_rmb();
1444         gc_seq2 = c->gc_seq;
1445         /* Same seq means no GC */
1446         if (gc_seq1 == gc_seq2)
1447                 return 0;
1448         /* Different by more than 1 means we don't know */
1449         if (gc_seq1 + 1 != gc_seq2)
1450                 return 1;
1451         /*
1452          * We have seen the sequence number has increased by 1. Now we need to
1453          * be sure we read the right LEB number, so read it again.
1454          */
1455         smp_rmb();
1456         if (gced_lnum != c->gced_lnum)
1457                 return 1;
1458         /* Finally we can check lnum */
1459         if (gced_lnum == lnum)
1460                 return 1;
1461         return 0;
1462 }
1463
1464 /**
1465  * ubifs_tnc_locate - look up a file-system node and return it and its location.
1466  * @c: UBIFS file-system description object
1467  * @key: node key to lookup
1468  * @node: the node is returned here
1469  * @lnum: LEB number is returned here
1470  * @offs: offset is returned here
1471  *
1472  * This function looks up and reads node with key @key. The caller has to make
1473  * sure the @node buffer is large enough to fit the node. Returns zero in case
1474  * of success, %-ENOENT if the node was not found, and a negative error code in
1475  * case of failure. The node location can be returned in @lnum and @offs.
1476  */
1477 int ubifs_tnc_locate(struct ubifs_info *c, const union ubifs_key *key,
1478                      void *node, int *lnum, int *offs)
1479 {
1480         int found, n, err, safely = 0, gc_seq1;
1481         struct ubifs_znode *znode;
1482         struct ubifs_zbranch zbr, *zt;
1483
1484 again:
1485         mutex_lock(&c->tnc_mutex);
1486         found = ubifs_lookup_level0(c, key, &znode, &n);
1487         if (!found) {
1488                 err = -ENOENT;
1489                 goto out;
1490         } else if (found < 0) {
1491                 err = found;
1492                 goto out;
1493         }
1494         zt = &znode->zbranch[n];
1495         if (lnum) {
1496                 *lnum = zt->lnum;
1497                 *offs = zt->offs;
1498         }
1499         if (is_hash_key(c, key)) {
1500                 /*
1501                  * In this case the leaf node cache gets used, so we pass the
1502                  * address of the zbranch and keep the mutex locked
1503                  */
1504                 err = tnc_read_hashed_node(c, zt, node);
1505                 goto out;
1506         }
1507         if (safely) {
1508                 err = ubifs_tnc_read_node(c, zt, node);
1509                 goto out;
1510         }
1511         /* Drop the TNC mutex prematurely and race with garbage collection */
1512         zbr = znode->zbranch[n];
1513         gc_seq1 = c->gc_seq;
1514         mutex_unlock(&c->tnc_mutex);
1515
1516         if (ubifs_get_wbuf(c, zbr.lnum)) {
1517                 /* We do not GC journal heads */
1518                 err = ubifs_tnc_read_node(c, &zbr, node);
1519                 return err;
1520         }
1521
1522         err = fallible_read_node(c, key, &zbr, node);
1523         if (err <= 0 || maybe_leb_gced(c, zbr.lnum, gc_seq1)) {
1524                 /*
1525                  * The node may have been GC'ed out from under us so try again
1526                  * while keeping the TNC mutex locked.
1527                  */
1528                 safely = 1;
1529                 goto again;
1530         }
1531         return 0;
1532
1533 out:
1534         mutex_unlock(&c->tnc_mutex);
1535         return err;
1536 }
1537
1538 /**
1539  * ubifs_tnc_get_bu_keys - lookup keys for bulk-read.
1540  * @c: UBIFS file-system description object
1541  * @bu: bulk-read parameters and results
1542  *
1543  * Lookup consecutive data node keys for the same inode that reside
1544  * consecutively in the same LEB. This function returns zero in case of success
1545  * and a negative error code in case of failure.
1546  *
1547  * Note, if the bulk-read buffer length (@bu->buf_len) is known, this function
1548  * makes sure bulk-read nodes fit the buffer. Otherwise, this function prepares
1549  * maximum possible amount of nodes for bulk-read.
1550  */
1551 int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu)
1552 {
1553         int n, err = 0, lnum = -1, offs;
1554         int len;
1555         unsigned int block = key_block(c, &bu->key);
1556         struct ubifs_znode *znode;
1557
1558         bu->cnt = 0;
1559         bu->blk_cnt = 0;
1560         bu->eof = 0;
1561
1562         mutex_lock(&c->tnc_mutex);
1563         /* Find first key */
1564         err = ubifs_lookup_level0(c, &bu->key, &znode, &n);
1565         if (err < 0)
1566                 goto out;
1567         if (err) {
1568                 /* Key found */
1569                 len = znode->zbranch[n].len;
1570                 /* The buffer must be big enough for at least 1 node */
1571                 if (len > bu->buf_len) {
1572                         err = -EINVAL;
1573                         goto out;
1574                 }
1575                 /* Add this key */
1576                 bu->zbranch[bu->cnt++] = znode->zbranch[n];
1577                 bu->blk_cnt += 1;
1578                 lnum = znode->zbranch[n].lnum;
1579                 offs = ALIGN(znode->zbranch[n].offs + len, 8);
1580         }
1581         while (1) {
1582                 struct ubifs_zbranch *zbr;
1583                 union ubifs_key *key;
1584                 unsigned int next_block;
1585
1586                 /* Find next key */
1587                 err = tnc_next(c, &znode, &n);
1588                 if (err)
1589                         goto out;
1590                 zbr = &znode->zbranch[n];
1591                 key = &zbr->key;
1592                 /* See if there is another data key for this file */
1593                 if (key_inum(c, key) != key_inum(c, &bu->key) ||
1594                     key_type(c, key) != UBIFS_DATA_KEY) {
1595                         err = -ENOENT;
1596                         goto out;
1597                 }
1598                 if (lnum < 0) {
1599                         /* First key found */
1600                         lnum = zbr->lnum;
1601                         offs = ALIGN(zbr->offs + zbr->len, 8);
1602                         len = zbr->len;
1603                         if (len > bu->buf_len) {
1604                                 err = -EINVAL;
1605                                 goto out;
1606                         }
1607                 } else {
1608                         /*
1609                          * The data nodes must be in consecutive positions in
1610                          * the same LEB.
1611                          */
1612                         if (zbr->lnum != lnum || zbr->offs != offs)
1613                                 goto out;
1614                         offs += ALIGN(zbr->len, 8);
1615                         len = ALIGN(len, 8) + zbr->len;
1616                         /* Must not exceed buffer length */
1617                         if (len > bu->buf_len)
1618                                 goto out;
1619                 }
1620                 /* Allow for holes */
1621                 next_block = key_block(c, key);
1622                 bu->blk_cnt += (next_block - block - 1);
1623                 if (bu->blk_cnt >= UBIFS_MAX_BULK_READ)
1624                         goto out;
1625                 block = next_block;
1626                 /* Add this key */
1627                 bu->zbranch[bu->cnt++] = *zbr;
1628                 bu->blk_cnt += 1;
1629                 /* See if we have room for more */
1630                 if (bu->cnt >= UBIFS_MAX_BULK_READ)
1631                         goto out;
1632                 if (bu->blk_cnt >= UBIFS_MAX_BULK_READ)
1633                         goto out;
1634         }
1635 out:
1636         if (err == -ENOENT) {
1637                 bu->eof = 1;
1638                 err = 0;
1639         }
1640         bu->gc_seq = c->gc_seq;
1641         mutex_unlock(&c->tnc_mutex);
1642         if (err)
1643                 return err;
1644         /*
1645          * An enormous hole could cause bulk-read to encompass too many
1646          * page cache pages, so limit the number here.
1647          */
1648         if (bu->blk_cnt > UBIFS_MAX_BULK_READ)
1649                 bu->blk_cnt = UBIFS_MAX_BULK_READ;
1650         /*
1651          * Ensure that bulk-read covers a whole number of page cache
1652          * pages.
1653          */
1654         if (UBIFS_BLOCKS_PER_PAGE == 1 ||
1655             !(bu->blk_cnt & (UBIFS_BLOCKS_PER_PAGE - 1)))
1656                 return 0;
1657         if (bu->eof) {
1658                 /* At the end of file we can round up */
1659                 bu->blk_cnt += UBIFS_BLOCKS_PER_PAGE - 1;
1660                 return 0;
1661         }
1662         /* Exclude data nodes that do not make up a whole page cache page */
1663         block = key_block(c, &bu->key) + bu->blk_cnt;
1664         block &= ~(UBIFS_BLOCKS_PER_PAGE - 1);
1665         while (bu->cnt) {
1666                 if (key_block(c, &bu->zbranch[bu->cnt - 1].key) < block)
1667                         break;
1668                 bu->cnt -= 1;
1669         }
1670         return 0;
1671 }
1672
1673 /**
1674  * read_wbuf - bulk-read from a LEB with a wbuf.
1675  * @wbuf: wbuf that may overlap the read
1676  * @buf: buffer into which to read
1677  * @len: read length
1678  * @lnum: LEB number from which to read
1679  * @offs: offset from which to read
1680  *
1681  * This functions returns %0 on success or a negative error code on failure.
1682  */
1683 static int read_wbuf(struct ubifs_wbuf *wbuf, void *buf, int len, int lnum,
1684                      int offs)
1685 {
1686         const struct ubifs_info *c = wbuf->c;
1687         int rlen, overlap;
1688
1689         dbg_io("LEB %d:%d, length %d", lnum, offs, len);
1690         ubifs_assert(c, wbuf && lnum >= 0 && lnum < c->leb_cnt && offs >= 0);
1691         ubifs_assert(c, !(offs & 7) && offs < c->leb_size);
1692         ubifs_assert(c, offs + len <= c->leb_size);
1693
1694         spin_lock(&wbuf->lock);
1695         overlap = (lnum == wbuf->lnum && offs + len > wbuf->offs);
1696         if (!overlap) {
1697                 /* We may safely unlock the write-buffer and read the data */
1698                 spin_unlock(&wbuf->lock);
1699                 return ubifs_leb_read(c, lnum, buf, offs, len, 0);
1700         }
1701
1702         /* Don't read under wbuf */
1703         rlen = wbuf->offs - offs;
1704         if (rlen < 0)
1705                 rlen = 0;
1706
1707         /* Copy the rest from the write-buffer */
1708         memcpy(buf + rlen, wbuf->buf + offs + rlen - wbuf->offs, len - rlen);
1709         spin_unlock(&wbuf->lock);
1710
1711         if (rlen > 0)
1712                 /* Read everything that goes before write-buffer */
1713                 return ubifs_leb_read(c, lnum, buf, offs, rlen, 0);
1714
1715         return 0;
1716 }
1717
1718 /**
1719  * validate_data_node - validate data nodes for bulk-read.
1720  * @c: UBIFS file-system description object
1721  * @buf: buffer containing data node to validate
1722  * @zbr: zbranch of data node to validate
1723  *
1724  * This functions returns %0 on success or a negative error code on failure.
1725  */
1726 static int validate_data_node(struct ubifs_info *c, void *buf,
1727                               struct ubifs_zbranch *zbr)
1728 {
1729         union ubifs_key key1;
1730         struct ubifs_ch *ch = buf;
1731         int err, len;
1732
1733         if (ch->node_type != UBIFS_DATA_NODE) {
1734                 ubifs_err(c, "bad node type (%d but expected %d)",
1735                           ch->node_type, UBIFS_DATA_NODE);
1736                 goto out_err;
1737         }
1738
1739         err = ubifs_check_node(c, buf, zbr->len, zbr->lnum, zbr->offs, 0, 0);
1740         if (err) {
1741                 ubifs_err(c, "expected node type %d", UBIFS_DATA_NODE);
1742                 goto out;
1743         }
1744
1745         err = ubifs_node_check_hash(c, buf, zbr->hash);
1746         if (err) {
1747                 ubifs_bad_hash(c, buf, zbr->hash, zbr->lnum, zbr->offs);
1748                 return err;
1749         }
1750
1751         len = le32_to_cpu(ch->len);
1752         if (len != zbr->len) {
1753                 ubifs_err(c, "bad node length %d, expected %d", len, zbr->len);
1754                 goto out_err;
1755         }
1756
1757         /* Make sure the key of the read node is correct */
1758         key_read(c, buf + UBIFS_KEY_OFFSET, &key1);
1759         if (!keys_eq(c, &zbr->key, &key1)) {
1760                 ubifs_err(c, "bad key in node at LEB %d:%d",
1761                           zbr->lnum, zbr->offs);
1762                 dbg_tnck(&zbr->key, "looked for key ");
1763                 dbg_tnck(&key1, "found node's key ");
1764                 goto out_err;
1765         }
1766
1767         return 0;
1768
1769 out_err:
1770         err = -EINVAL;
1771 out:
1772         ubifs_err(c, "bad node at LEB %d:%d", zbr->lnum, zbr->offs);
1773         ubifs_dump_node(c, buf, zbr->len);
1774         dump_stack();
1775         return err;
1776 }
1777
1778 /**
1779  * ubifs_tnc_bulk_read - read a number of data nodes in one go.
1780  * @c: UBIFS file-system description object
1781  * @bu: bulk-read parameters and results
1782  *
1783  * This functions reads and validates the data nodes that were identified by the
1784  * 'ubifs_tnc_get_bu_keys()' function. This functions returns %0 on success,
1785  * -EAGAIN to indicate a race with GC, or another negative error code on
1786  * failure.
1787  */
1788 int ubifs_tnc_bulk_read(struct ubifs_info *c, struct bu_info *bu)
1789 {
1790         int lnum = bu->zbranch[0].lnum, offs = bu->zbranch[0].offs, len, err, i;
1791         struct ubifs_wbuf *wbuf;
1792         void *buf;
1793
1794         len = bu->zbranch[bu->cnt - 1].offs;
1795         len += bu->zbranch[bu->cnt - 1].len - offs;
1796         if (len > bu->buf_len) {
1797                 ubifs_err(c, "buffer too small %d vs %d", bu->buf_len, len);
1798                 return -EINVAL;
1799         }
1800
1801         /* Do the read */
1802         wbuf = ubifs_get_wbuf(c, lnum);
1803         if (wbuf)
1804                 err = read_wbuf(wbuf, bu->buf, len, lnum, offs);
1805         else
1806                 err = ubifs_leb_read(c, lnum, bu->buf, offs, len, 0);
1807
1808         /* Check for a race with GC */
1809         if (maybe_leb_gced(c, lnum, bu->gc_seq))
1810                 return -EAGAIN;
1811
1812         if (err && err != -EBADMSG) {
1813                 ubifs_err(c, "failed to read from LEB %d:%d, error %d",
1814                           lnum, offs, err);
1815                 dump_stack();
1816                 dbg_tnck(&bu->key, "key ");
1817                 return err;
1818         }
1819
1820         /* Validate the nodes read */
1821         buf = bu->buf;
1822         for (i = 0; i < bu->cnt; i++) {
1823                 err = validate_data_node(c, buf, &bu->zbranch[i]);
1824                 if (err)
1825                         return err;
1826                 buf = buf + ALIGN(bu->zbranch[i].len, 8);
1827         }
1828
1829         return 0;
1830 }
1831
1832 /**
1833  * do_lookup_nm- look up a "hashed" node.
1834  * @c: UBIFS file-system description object
1835  * @key: node key to lookup
1836  * @node: the node is returned here
1837  * @nm: node name
1838  *
1839  * This function looks up and reads a node which contains name hash in the key.
1840  * Since the hash may have collisions, there may be many nodes with the same
1841  * key, so we have to sequentially look to all of them until the needed one is
1842  * found. This function returns zero in case of success, %-ENOENT if the node
1843  * was not found, and a negative error code in case of failure.
1844  */
1845 static int do_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
1846                         void *node, const struct fscrypt_name *nm)
1847 {
1848         int found, n, err;
1849         struct ubifs_znode *znode;
1850
1851         dbg_tnck(key, "key ");
1852         mutex_lock(&c->tnc_mutex);
1853         found = ubifs_lookup_level0(c, key, &znode, &n);
1854         if (!found) {
1855                 err = -ENOENT;
1856                 goto out_unlock;
1857         } else if (found < 0) {
1858                 err = found;
1859                 goto out_unlock;
1860         }
1861
1862         ubifs_assert(c, n >= 0);
1863
1864         err = resolve_collision(c, key, &znode, &n, nm);
1865         dbg_tnc("rc returned %d, znode %p, n %d", err, znode, n);
1866         if (unlikely(err < 0))
1867                 goto out_unlock;
1868         if (err == 0) {
1869                 err = -ENOENT;
1870                 goto out_unlock;
1871         }
1872
1873         err = tnc_read_hashed_node(c, &znode->zbranch[n], node);
1874
1875 out_unlock:
1876         mutex_unlock(&c->tnc_mutex);
1877         return err;
1878 }
1879
1880 /**
1881  * ubifs_tnc_lookup_nm - look up a "hashed" node.
1882  * @c: UBIFS file-system description object
1883  * @key: node key to lookup
1884  * @node: the node is returned here
1885  * @nm: node name
1886  *
1887  * This function looks up and reads a node which contains name hash in the key.
1888  * Since the hash may have collisions, there may be many nodes with the same
1889  * key, so we have to sequentially look to all of them until the needed one is
1890  * found. This function returns zero in case of success, %-ENOENT if the node
1891  * was not found, and a negative error code in case of failure.
1892  */
1893 int ubifs_tnc_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
1894                         void *node, const struct fscrypt_name *nm)
1895 {
1896         int err, len;
1897         const struct ubifs_dent_node *dent = node;
1898
1899         /*
1900          * We assume that in most of the cases there are no name collisions and
1901          * 'ubifs_tnc_lookup()' returns us the right direntry.
1902          */
1903         err = ubifs_tnc_lookup(c, key, node);
1904         if (err)
1905                 return err;
1906
1907         len = le16_to_cpu(dent->nlen);
1908         if (fname_len(nm) == len && !memcmp(dent->name, fname_name(nm), len))
1909                 return 0;
1910
1911         /*
1912          * Unluckily, there are hash collisions and we have to iterate over
1913          * them look at each direntry with colliding name hash sequentially.
1914          */
1915
1916         return do_lookup_nm(c, key, node, nm);
1917 }
1918
1919 static int search_dh_cookie(struct ubifs_info *c, const union ubifs_key *key,
1920                             struct ubifs_dent_node *dent, uint32_t cookie,
1921                             struct ubifs_znode **zn, int *n, int exact)
1922 {
1923         int err;
1924         struct ubifs_znode *znode = *zn;
1925         struct ubifs_zbranch *zbr;
1926         union ubifs_key *dkey;
1927
1928         if (!exact) {
1929                 err = tnc_next(c, &znode, n);
1930                 if (err)
1931                         return err;
1932         }
1933
1934         for (;;) {
1935                 zbr = &znode->zbranch[*n];
1936                 dkey = &zbr->key;
1937
1938                 if (key_inum(c, dkey) != key_inum(c, key) ||
1939                     key_type(c, dkey) != key_type(c, key)) {
1940                         return -ENOENT;
1941                 }
1942
1943                 err = tnc_read_hashed_node(c, zbr, dent);
1944                 if (err)
1945                         return err;
1946
1947                 if (key_hash(c, key) == key_hash(c, dkey) &&
1948                     le32_to_cpu(dent->cookie) == cookie) {
1949                         *zn = znode;
1950                         return 0;
1951                 }
1952
1953                 err = tnc_next(c, &znode, n);
1954                 if (err)
1955                         return err;
1956         }
1957 }
1958
1959 static int do_lookup_dh(struct ubifs_info *c, const union ubifs_key *key,
1960                         struct ubifs_dent_node *dent, uint32_t cookie)
1961 {
1962         int n, err;
1963         struct ubifs_znode *znode;
1964         union ubifs_key start_key;
1965
1966         ubifs_assert(c, is_hash_key(c, key));
1967
1968         lowest_dent_key(c, &start_key, key_inum(c, key));
1969
1970         mutex_lock(&c->tnc_mutex);
1971         err = ubifs_lookup_level0(c, &start_key, &znode, &n);
1972         if (unlikely(err < 0))
1973                 goto out_unlock;
1974
1975         err = search_dh_cookie(c, key, dent, cookie, &znode, &n, err);
1976
1977 out_unlock:
1978         mutex_unlock(&c->tnc_mutex);
1979         return err;
1980 }
1981
1982 /**
1983  * ubifs_tnc_lookup_dh - look up a "double hashed" node.
1984  * @c: UBIFS file-system description object
1985  * @key: node key to lookup
1986  * @node: the node is returned here
1987  * @cookie: node cookie for collision resolution
1988  *
1989  * This function looks up and reads a node which contains name hash in the key.
1990  * Since the hash may have collisions, there may be many nodes with the same
1991  * key, so we have to sequentially look to all of them until the needed one
1992  * with the same cookie value is found.
1993  * This function returns zero in case of success, %-ENOENT if the node
1994  * was not found, and a negative error code in case of failure.
1995  */
1996 int ubifs_tnc_lookup_dh(struct ubifs_info *c, const union ubifs_key *key,
1997                         void *node, uint32_t cookie)
1998 {
1999         int err;
2000         const struct ubifs_dent_node *dent = node;
2001
2002         if (!c->double_hash)
2003                 return -EOPNOTSUPP;
2004
2005         /*
2006          * We assume that in most of the cases there are no name collisions and
2007          * 'ubifs_tnc_lookup()' returns us the right direntry.
2008          */
2009         err = ubifs_tnc_lookup(c, key, node);
2010         if (err)
2011                 return err;
2012
2013         if (le32_to_cpu(dent->cookie) == cookie)
2014                 return 0;
2015
2016         /*
2017          * Unluckily, there are hash collisions and we have to iterate over
2018          * them look at each direntry with colliding name hash sequentially.
2019          */
2020         return do_lookup_dh(c, key, node, cookie);
2021 }
2022
2023 /**
2024  * correct_parent_keys - correct parent znodes' keys.
2025  * @c: UBIFS file-system description object
2026  * @znode: znode to correct parent znodes for
2027  *
2028  * This is a helper function for 'tnc_insert()'. When the key of the leftmost
2029  * zbranch changes, keys of parent znodes have to be corrected. This helper
2030  * function is called in such situations and corrects the keys if needed.
2031  */
2032 static void correct_parent_keys(const struct ubifs_info *c,
2033                                 struct ubifs_znode *znode)
2034 {
2035         union ubifs_key *key, *key1;
2036
2037         ubifs_assert(c, znode->parent);
2038         ubifs_assert(c, znode->iip == 0);
2039
2040         key = &znode->zbranch[0].key;
2041         key1 = &znode->parent->zbranch[0].key;
2042
2043         while (keys_cmp(c, key, key1) < 0) {
2044                 key_copy(c, key, key1);
2045                 znode = znode->parent;
2046                 znode->alt = 1;
2047                 if (!znode->parent || znode->iip)
2048                         break;
2049                 key1 = &znode->parent->zbranch[0].key;
2050         }
2051 }
2052
2053 /**
2054  * insert_zbranch - insert a zbranch into a znode.
2055  * @c: UBIFS file-system description object
2056  * @znode: znode into which to insert
2057  * @zbr: zbranch to insert
2058  * @n: slot number to insert to
2059  *
2060  * This is a helper function for 'tnc_insert()'. UBIFS does not allow "gaps" in
2061  * znode's array of zbranches and keeps zbranches consolidated, so when a new
2062  * zbranch has to be inserted to the @znode->zbranches[]' array at the @n-th
2063  * slot, zbranches starting from @n have to be moved right.
2064  */
2065 static void insert_zbranch(struct ubifs_info *c, struct ubifs_znode *znode,
2066                            const struct ubifs_zbranch *zbr, int n)
2067 {
2068         int i;
2069
2070         ubifs_assert(c, ubifs_zn_dirty(znode));
2071
2072         if (znode->level) {
2073                 for (i = znode->child_cnt; i > n; i--) {
2074                         znode->zbranch[i] = znode->zbranch[i - 1];
2075                         if (znode->zbranch[i].znode)
2076                                 znode->zbranch[i].znode->iip = i;
2077                 }
2078                 if (zbr->znode)
2079                         zbr->znode->iip = n;
2080         } else
2081                 for (i = znode->child_cnt; i > n; i--)
2082                         znode->zbranch[i] = znode->zbranch[i - 1];
2083
2084         znode->zbranch[n] = *zbr;
2085         znode->child_cnt += 1;
2086
2087         /*
2088          * After inserting at slot zero, the lower bound of the key range of
2089          * this znode may have changed. If this znode is subsequently split
2090          * then the upper bound of the key range may change, and furthermore
2091          * it could change to be lower than the original lower bound. If that
2092          * happens, then it will no longer be possible to find this znode in the
2093          * TNC using the key from the index node on flash. That is bad because
2094          * if it is not found, we will assume it is obsolete and may overwrite
2095          * it. Then if there is an unclean unmount, we will start using the
2096          * old index which will be broken.
2097          *
2098          * So we first mark znodes that have insertions at slot zero, and then
2099          * if they are split we add their lnum/offs to the old_idx tree.
2100          */
2101         if (n == 0)
2102                 znode->alt = 1;
2103 }
2104
2105 /**
2106  * tnc_insert - insert a node into TNC.
2107  * @c: UBIFS file-system description object
2108  * @znode: znode to insert into
2109  * @zbr: branch to insert
2110  * @n: slot number to insert new zbranch to
2111  *
2112  * This function inserts a new node described by @zbr into znode @znode. If
2113  * znode does not have a free slot for new zbranch, it is split. Parent znodes
2114  * are splat as well if needed. Returns zero in case of success or a negative
2115  * error code in case of failure.
2116  */
2117 static int tnc_insert(struct ubifs_info *c, struct ubifs_znode *znode,
2118                       struct ubifs_zbranch *zbr, int n)
2119 {
2120         struct ubifs_znode *zn, *zi, *zp;
2121         int i, keep, move, appending = 0;
2122         union ubifs_key *key = &zbr->key, *key1;
2123
2124         ubifs_assert(c, n >= 0 && n <= c->fanout);
2125
2126         /* Implement naive insert for now */
2127 again:
2128         zp = znode->parent;
2129         if (znode->child_cnt < c->fanout) {
2130                 ubifs_assert(c, n != c->fanout);
2131                 dbg_tnck(key, "inserted at %d level %d, key ", n, znode->level);
2132
2133                 insert_zbranch(c, znode, zbr, n);
2134
2135                 /* Ensure parent's key is correct */
2136                 if (n == 0 && zp && znode->iip == 0)
2137                         correct_parent_keys(c, znode);
2138
2139                 return 0;
2140         }
2141
2142         /*
2143          * Unfortunately, @znode does not have more empty slots and we have to
2144          * split it.
2145          */
2146         dbg_tnck(key, "splitting level %d, key ", znode->level);
2147
2148         if (znode->alt)
2149                 /*
2150                  * We can no longer be sure of finding this znode by key, so we
2151                  * record it in the old_idx tree.
2152                  */
2153                 ins_clr_old_idx_znode(c, znode);
2154
2155         zn = kzalloc(c->max_znode_sz, GFP_NOFS);
2156         if (!zn)
2157                 return -ENOMEM;
2158         zn->parent = zp;
2159         zn->level = znode->level;
2160
2161         /* Decide where to split */
2162         if (znode->level == 0 && key_type(c, key) == UBIFS_DATA_KEY) {
2163                 /* Try not to split consecutive data keys */
2164                 if (n == c->fanout) {
2165                         key1 = &znode->zbranch[n - 1].key;
2166                         if (key_inum(c, key1) == key_inum(c, key) &&
2167                             key_type(c, key1) == UBIFS_DATA_KEY)
2168                                 appending = 1;
2169                 } else
2170                         goto check_split;
2171         } else if (appending && n != c->fanout) {
2172                 /* Try not to split consecutive data keys */
2173                 appending = 0;
2174 check_split:
2175                 if (n >= (c->fanout + 1) / 2) {
2176                         key1 = &znode->zbranch[0].key;
2177                         if (key_inum(c, key1) == key_inum(c, key) &&
2178                             key_type(c, key1) == UBIFS_DATA_KEY) {
2179                                 key1 = &znode->zbranch[n].key;
2180                                 if (key_inum(c, key1) != key_inum(c, key) ||
2181                                     key_type(c, key1) != UBIFS_DATA_KEY) {
2182                                         keep = n;
2183                                         move = c->fanout - keep;
2184                                         zi = znode;
2185                                         goto do_split;
2186                                 }
2187                         }
2188                 }
2189         }
2190
2191         if (appending) {
2192                 keep = c->fanout;
2193                 move = 0;
2194         } else {
2195                 keep = (c->fanout + 1) / 2;
2196                 move = c->fanout - keep;
2197         }
2198
2199         /*
2200          * Although we don't at present, we could look at the neighbors and see
2201          * if we can move some zbranches there.
2202          */
2203
2204         if (n < keep) {
2205                 /* Insert into existing znode */
2206                 zi = znode;
2207                 move += 1;
2208                 keep -= 1;
2209         } else {
2210                 /* Insert into new znode */
2211                 zi = zn;
2212                 n -= keep;
2213                 /* Re-parent */
2214                 if (zn->level != 0)
2215                         zbr->znode->parent = zn;
2216         }
2217
2218 do_split:
2219
2220         __set_bit(DIRTY_ZNODE, &zn->flags);
2221         atomic_long_inc(&c->dirty_zn_cnt);
2222
2223         zn->child_cnt = move;
2224         znode->child_cnt = keep;
2225
2226         dbg_tnc("moving %d, keeping %d", move, keep);
2227
2228         /* Move zbranch */
2229         for (i = 0; i < move; i++) {
2230                 zn->zbranch[i] = znode->zbranch[keep + i];
2231                 /* Re-parent */
2232                 if (zn->level != 0)
2233                         if (zn->zbranch[i].znode) {
2234                                 zn->zbranch[i].znode->parent = zn;
2235                                 zn->zbranch[i].znode->iip = i;
2236                         }
2237         }
2238
2239         /* Insert new key and branch */
2240         dbg_tnck(key, "inserting at %d level %d, key ", n, zn->level);
2241
2242         insert_zbranch(c, zi, zbr, n);
2243
2244         /* Insert new znode (produced by spitting) into the parent */
2245         if (zp) {
2246                 if (n == 0 && zi == znode && znode->iip == 0)
2247                         correct_parent_keys(c, znode);
2248
2249                 /* Locate insertion point */
2250                 n = znode->iip + 1;
2251
2252                 /* Tail recursion */
2253                 zbr->key = zn->zbranch[0].key;
2254                 zbr->znode = zn;
2255                 zbr->lnum = 0;
2256                 zbr->offs = 0;
2257                 zbr->len = 0;
2258                 znode = zp;
2259
2260                 goto again;
2261         }
2262
2263         /* We have to split root znode */
2264         dbg_tnc("creating new zroot at level %d", znode->level + 1);
2265
2266         zi = kzalloc(c->max_znode_sz, GFP_NOFS);
2267         if (!zi)
2268                 return -ENOMEM;
2269
2270         zi->child_cnt = 2;
2271         zi->level = znode->level + 1;
2272
2273         __set_bit(DIRTY_ZNODE, &zi->flags);
2274         atomic_long_inc(&c->dirty_zn_cnt);
2275
2276         zi->zbranch[0].key = znode->zbranch[0].key;
2277         zi->zbranch[0].znode = znode;
2278         zi->zbranch[0].lnum = c->zroot.lnum;
2279         zi->zbranch[0].offs = c->zroot.offs;
2280         zi->zbranch[0].len = c->zroot.len;
2281         zi->zbranch[1].key = zn->zbranch[0].key;
2282         zi->zbranch[1].znode = zn;
2283
2284         c->zroot.lnum = 0;
2285         c->zroot.offs = 0;
2286         c->zroot.len = 0;
2287         c->zroot.znode = zi;
2288
2289         zn->parent = zi;
2290         zn->iip = 1;
2291         znode->parent = zi;
2292         znode->iip = 0;
2293
2294         return 0;
2295 }
2296
2297 /**
2298  * ubifs_tnc_add - add a node to TNC.
2299  * @c: UBIFS file-system description object
2300  * @key: key to add
2301  * @lnum: LEB number of node
2302  * @offs: node offset
2303  * @len: node length
2304  * @hash: The hash over the node
2305  *
2306  * This function adds a node with key @key to TNC. The node may be new or it may
2307  * obsolete some existing one. Returns %0 on success or negative error code on
2308  * failure.
2309  */
2310 int ubifs_tnc_add(struct ubifs_info *c, const union ubifs_key *key, int lnum,
2311                   int offs, int len, const u8 *hash)
2312 {
2313         int found, n, err = 0;
2314         struct ubifs_znode *znode;
2315
2316         mutex_lock(&c->tnc_mutex);
2317         dbg_tnck(key, "%d:%d, len %d, key ", lnum, offs, len);
2318         found = lookup_level0_dirty(c, key, &znode, &n);
2319         if (!found) {
2320                 struct ubifs_zbranch zbr;
2321
2322                 zbr.znode = NULL;
2323                 zbr.lnum = lnum;
2324                 zbr.offs = offs;
2325                 zbr.len = len;
2326                 ubifs_copy_hash(c, hash, zbr.hash);
2327                 key_copy(c, key, &zbr.key);
2328                 err = tnc_insert(c, znode, &zbr, n + 1);
2329         } else if (found == 1) {
2330                 struct ubifs_zbranch *zbr = &znode->zbranch[n];
2331
2332                 lnc_free(zbr);
2333                 err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2334                 zbr->lnum = lnum;
2335                 zbr->offs = offs;
2336                 zbr->len = len;
2337                 ubifs_copy_hash(c, hash, zbr->hash);
2338         } else
2339                 err = found;
2340         if (!err)
2341                 err = dbg_check_tnc(c, 0);
2342         mutex_unlock(&c->tnc_mutex);
2343
2344         return err;
2345 }
2346
2347 /**
2348  * ubifs_tnc_replace - replace a node in the TNC only if the old node is found.
2349  * @c: UBIFS file-system description object
2350  * @key: key to add
2351  * @old_lnum: LEB number of old node
2352  * @old_offs: old node offset
2353  * @lnum: LEB number of node
2354  * @offs: node offset
2355  * @len: node length
2356  *
2357  * This function replaces a node with key @key in the TNC only if the old node
2358  * is found.  This function is called by garbage collection when node are moved.
2359  * Returns %0 on success or negative error code on failure.
2360  */
2361 int ubifs_tnc_replace(struct ubifs_info *c, const union ubifs_key *key,
2362                       int old_lnum, int old_offs, int lnum, int offs, int len)
2363 {
2364         int found, n, err = 0;
2365         struct ubifs_znode *znode;
2366
2367         mutex_lock(&c->tnc_mutex);
2368         dbg_tnck(key, "old LEB %d:%d, new LEB %d:%d, len %d, key ", old_lnum,
2369                  old_offs, lnum, offs, len);
2370         found = lookup_level0_dirty(c, key, &znode, &n);
2371         if (found < 0) {
2372                 err = found;
2373                 goto out_unlock;
2374         }
2375
2376         if (found == 1) {
2377                 struct ubifs_zbranch *zbr = &znode->zbranch[n];
2378
2379                 found = 0;
2380                 if (zbr->lnum == old_lnum && zbr->offs == old_offs) {
2381                         lnc_free(zbr);
2382                         err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2383                         if (err)
2384                                 goto out_unlock;
2385                         zbr->lnum = lnum;
2386                         zbr->offs = offs;
2387                         zbr->len = len;
2388                         found = 1;
2389                 } else if (is_hash_key(c, key)) {
2390                         found = resolve_collision_directly(c, key, &znode, &n,
2391                                                            old_lnum, old_offs);
2392                         dbg_tnc("rc returned %d, znode %p, n %d, LEB %d:%d",
2393                                 found, znode, n, old_lnum, old_offs);
2394                         if (found < 0) {
2395                                 err = found;
2396                                 goto out_unlock;
2397                         }
2398
2399                         if (found) {
2400                                 /* Ensure the znode is dirtied */
2401                                 if (znode->cnext || !ubifs_zn_dirty(znode)) {
2402                                         znode = dirty_cow_bottom_up(c, znode);
2403                                         if (IS_ERR(znode)) {
2404                                                 err = PTR_ERR(znode);
2405                                                 goto out_unlock;
2406                                         }
2407                                 }
2408                                 zbr = &znode->zbranch[n];
2409                                 lnc_free(zbr);
2410                                 err = ubifs_add_dirt(c, zbr->lnum,
2411                                                      zbr->len);
2412                                 if (err)
2413                                         goto out_unlock;
2414                                 zbr->lnum = lnum;
2415                                 zbr->offs = offs;
2416                                 zbr->len = len;
2417                         }
2418                 }
2419         }
2420
2421         if (!found)
2422                 err = ubifs_add_dirt(c, lnum, len);
2423
2424         if (!err)
2425                 err = dbg_check_tnc(c, 0);
2426
2427 out_unlock:
2428         mutex_unlock(&c->tnc_mutex);
2429         return err;
2430 }
2431
2432 /**
2433  * ubifs_tnc_add_nm - add a "hashed" node to TNC.
2434  * @c: UBIFS file-system description object
2435  * @key: key to add
2436  * @lnum: LEB number of node
2437  * @offs: node offset
2438  * @len: node length
2439  * @hash: The hash over the node
2440  * @nm: node name
2441  *
2442  * This is the same as 'ubifs_tnc_add()' but it should be used with keys which
2443  * may have collisions, like directory entry keys.
2444  */
2445 int ubifs_tnc_add_nm(struct ubifs_info *c, const union ubifs_key *key,
2446                      int lnum, int offs, int len, const u8 *hash,
2447                      const struct fscrypt_name *nm)
2448 {
2449         int found, n, err = 0;
2450         struct ubifs_znode *znode;
2451
2452         mutex_lock(&c->tnc_mutex);
2453         dbg_tnck(key, "LEB %d:%d, key ", lnum, offs);
2454         found = lookup_level0_dirty(c, key, &znode, &n);
2455         if (found < 0) {
2456                 err = found;
2457                 goto out_unlock;
2458         }
2459
2460         if (found == 1) {
2461                 if (c->replaying)
2462                         found = fallible_resolve_collision(c, key, &znode, &n,
2463                                                            nm, 1);
2464                 else
2465                         found = resolve_collision(c, key, &znode, &n, nm);
2466                 dbg_tnc("rc returned %d, znode %p, n %d", found, znode, n);
2467                 if (found < 0) {
2468                         err = found;
2469                         goto out_unlock;
2470                 }
2471
2472                 /* Ensure the znode is dirtied */
2473                 if (znode->cnext || !ubifs_zn_dirty(znode)) {
2474                         znode = dirty_cow_bottom_up(c, znode);
2475                         if (IS_ERR(znode)) {
2476                                 err = PTR_ERR(znode);
2477                                 goto out_unlock;
2478                         }
2479                 }
2480
2481                 if (found == 1) {
2482                         struct ubifs_zbranch *zbr = &znode->zbranch[n];
2483
2484                         lnc_free(zbr);
2485                         err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2486                         zbr->lnum = lnum;
2487                         zbr->offs = offs;
2488                         zbr->len = len;
2489                         ubifs_copy_hash(c, hash, zbr->hash);
2490                         goto out_unlock;
2491                 }
2492         }
2493
2494         if (!found) {
2495                 struct ubifs_zbranch zbr;
2496
2497                 zbr.znode = NULL;
2498                 zbr.lnum = lnum;
2499                 zbr.offs = offs;
2500                 zbr.len = len;
2501                 ubifs_copy_hash(c, hash, zbr.hash);
2502                 key_copy(c, key, &zbr.key);
2503                 err = tnc_insert(c, znode, &zbr, n + 1);
2504                 if (err)
2505                         goto out_unlock;
2506                 if (c->replaying) {
2507                         /*
2508                          * We did not find it in the index so there may be a
2509                          * dangling branch still in the index. So we remove it
2510                          * by passing 'ubifs_tnc_remove_nm()' the same key but
2511                          * an unmatchable name.
2512                          */
2513                         struct fscrypt_name noname = { .disk_name = { .name = "", .len = 1 } };
2514
2515                         err = dbg_check_tnc(c, 0);
2516                         mutex_unlock(&c->tnc_mutex);
2517                         if (err)
2518                                 return err;
2519                         return ubifs_tnc_remove_nm(c, key, &noname);
2520                 }
2521         }
2522
2523 out_unlock:
2524         if (!err)
2525                 err = dbg_check_tnc(c, 0);
2526         mutex_unlock(&c->tnc_mutex);
2527         return err;
2528 }
2529
2530 /**
2531  * tnc_delete - delete a znode form TNC.
2532  * @c: UBIFS file-system description object
2533  * @znode: znode to delete from
2534  * @n: zbranch slot number to delete
2535  *
2536  * This function deletes a leaf node from @n-th slot of @znode. Returns zero in
2537  * case of success and a negative error code in case of failure.
2538  */
2539 static int tnc_delete(struct ubifs_info *c, struct ubifs_znode *znode, int n)
2540 {
2541         struct ubifs_zbranch *zbr;
2542         struct ubifs_znode *zp;
2543         int i, err;
2544
2545         /* Delete without merge for now */
2546         ubifs_assert(c, znode->level == 0);
2547         ubifs_assert(c, n >= 0 && n < c->fanout);
2548         dbg_tnck(&znode->zbranch[n].key, "deleting key ");
2549
2550         zbr = &znode->zbranch[n];
2551         lnc_free(zbr);
2552
2553         err = ubifs_add_dirt(c, zbr->lnum, zbr->len);
2554         if (err) {
2555                 ubifs_dump_znode(c, znode);
2556                 return err;
2557         }
2558
2559         /* We do not "gap" zbranch slots */
2560         for (i = n; i < znode->child_cnt - 1; i++)
2561                 znode->zbranch[i] = znode->zbranch[i + 1];
2562         znode->child_cnt -= 1;
2563
2564         if (znode->child_cnt > 0)
2565                 return 0;
2566
2567         /*
2568          * This was the last zbranch, we have to delete this znode from the
2569          * parent.
2570          */
2571
2572         do {
2573                 ubifs_assert(c, !ubifs_zn_obsolete(znode));
2574                 ubifs_assert(c, ubifs_zn_dirty(znode));
2575
2576                 zp = znode->parent;
2577                 n = znode->iip;
2578
2579                 atomic_long_dec(&c->dirty_zn_cnt);
2580
2581                 err = insert_old_idx_znode(c, znode);
2582                 if (err)
2583                         return err;
2584
2585                 if (znode->cnext) {
2586                         __set_bit(OBSOLETE_ZNODE, &znode->flags);
2587                         atomic_long_inc(&c->clean_zn_cnt);
2588                         atomic_long_inc(&ubifs_clean_zn_cnt);
2589                 } else
2590                         kfree(znode);
2591                 znode = zp;
2592         } while (znode->child_cnt == 1); /* while removing last child */
2593
2594         /* Remove from znode, entry n - 1 */
2595         znode->child_cnt -= 1;
2596         ubifs_assert(c, znode->level != 0);
2597         for (i = n; i < znode->child_cnt; i++) {
2598                 znode->zbranch[i] = znode->zbranch[i + 1];
2599                 if (znode->zbranch[i].znode)
2600                         znode->zbranch[i].znode->iip = i;
2601         }
2602
2603         /*
2604          * If this is the root and it has only 1 child then
2605          * collapse the tree.
2606          */
2607         if (!znode->parent) {
2608                 while (znode->child_cnt == 1 && znode->level != 0) {
2609                         zp = znode;
2610                         zbr = &znode->zbranch[0];
2611                         znode = get_znode(c, znode, 0);
2612                         if (IS_ERR(znode))
2613                                 return PTR_ERR(znode);
2614                         znode = dirty_cow_znode(c, zbr);
2615                         if (IS_ERR(znode))
2616                                 return PTR_ERR(znode);
2617                         znode->parent = NULL;
2618                         znode->iip = 0;
2619                         if (c->zroot.len) {
2620                                 err = insert_old_idx(c, c->zroot.lnum,
2621                                                      c->zroot.offs);
2622                                 if (err)
2623                                         return err;
2624                         }
2625                         c->zroot.lnum = zbr->lnum;
2626                         c->zroot.offs = zbr->offs;
2627                         c->zroot.len = zbr->len;
2628                         c->zroot.znode = znode;
2629                         ubifs_assert(c, !ubifs_zn_obsolete(zp));
2630                         ubifs_assert(c, ubifs_zn_dirty(zp));
2631                         atomic_long_dec(&c->dirty_zn_cnt);
2632
2633                         if (zp->cnext) {
2634                                 __set_bit(OBSOLETE_ZNODE, &zp->flags);
2635                                 atomic_long_inc(&c->clean_zn_cnt);
2636                                 atomic_long_inc(&ubifs_clean_zn_cnt);
2637                         } else
2638                                 kfree(zp);
2639                 }
2640         }
2641
2642         return 0;
2643 }
2644
2645 /**
2646  * ubifs_tnc_remove - remove an index entry of a node.
2647  * @c: UBIFS file-system description object
2648  * @key: key of node
2649  *
2650  * Returns %0 on success or negative error code on failure.
2651  */
2652 int ubifs_tnc_remove(struct ubifs_info *c, const union ubifs_key *key)
2653 {
2654         int found, n, err = 0;
2655         struct ubifs_znode *znode;
2656
2657         mutex_lock(&c->tnc_mutex);
2658         dbg_tnck(key, "key ");
2659         found = lookup_level0_dirty(c, key, &znode, &n);
2660         if (found < 0) {
2661                 err = found;
2662                 goto out_unlock;
2663         }
2664         if (found == 1)
2665                 err = tnc_delete(c, znode, n);
2666         if (!err)
2667                 err = dbg_check_tnc(c, 0);
2668
2669 out_unlock:
2670         mutex_unlock(&c->tnc_mutex);
2671         return err;
2672 }
2673
2674 /**
2675  * ubifs_tnc_remove_nm - remove an index entry for a "hashed" node.
2676  * @c: UBIFS file-system description object
2677  * @key: key of node
2678  * @nm: directory entry name
2679  *
2680  * Returns %0 on success or negative error code on failure.
2681  */
2682 int ubifs_tnc_remove_nm(struct ubifs_info *c, const union ubifs_key *key,
2683                         const struct fscrypt_name *nm)
2684 {
2685         int n, err;
2686         struct ubifs_znode *znode;
2687
2688         mutex_lock(&c->tnc_mutex);
2689         dbg_tnck(key, "key ");
2690         err = lookup_level0_dirty(c, key, &znode, &n);
2691         if (err < 0)
2692                 goto out_unlock;
2693
2694         if (err) {
2695                 if (c->replaying)
2696                         err = fallible_resolve_collision(c, key, &znode, &n,
2697                                                          nm, 0);
2698                 else
2699                         err = resolve_collision(c, key, &znode, &n, nm);
2700                 dbg_tnc("rc returned %d, znode %p, n %d", err, znode, n);
2701                 if (err < 0)
2702                         goto out_unlock;
2703                 if (err) {
2704                         /* Ensure the znode is dirtied */
2705                         if (znode->cnext || !ubifs_zn_dirty(znode)) {
2706                                 znode = dirty_cow_bottom_up(c, znode);
2707                                 if (IS_ERR(znode)) {
2708                                         err = PTR_ERR(znode);
2709                                         goto out_unlock;
2710                                 }
2711                         }
2712                         err = tnc_delete(c, znode, n);
2713                 }
2714         }
2715
2716 out_unlock:
2717         if (!err)
2718                 err = dbg_check_tnc(c, 0);
2719         mutex_unlock(&c->tnc_mutex);
2720         return err;
2721 }
2722
2723 /**
2724  * ubifs_tnc_remove_dh - remove an index entry for a "double hashed" node.
2725  * @c: UBIFS file-system description object
2726  * @key: key of node
2727  * @cookie: node cookie for collision resolution
2728  *
2729  * Returns %0 on success or negative error code on failure.
2730  */
2731 int ubifs_tnc_remove_dh(struct ubifs_info *c, const union ubifs_key *key,
2732                         uint32_t cookie)
2733 {
2734         int n, err;
2735         struct ubifs_znode *znode;
2736         struct ubifs_dent_node *dent;
2737         struct ubifs_zbranch *zbr;
2738
2739         if (!c->double_hash)
2740                 return -EOPNOTSUPP;
2741
2742         mutex_lock(&c->tnc_mutex);
2743         err = lookup_level0_dirty(c, key, &znode, &n);
2744         if (err <= 0)
2745                 goto out_unlock;
2746
2747         zbr = &znode->zbranch[n];
2748         dent = kmalloc(UBIFS_MAX_DENT_NODE_SZ, GFP_NOFS);
2749         if (!dent) {
2750                 err = -ENOMEM;
2751                 goto out_unlock;
2752         }
2753
2754         err = tnc_read_hashed_node(c, zbr, dent);
2755         if (err)
2756                 goto out_free;
2757
2758         /* If the cookie does not match, we're facing a hash collision. */
2759         if (le32_to_cpu(dent->cookie) != cookie) {
2760                 union ubifs_key start_key;
2761
2762                 lowest_dent_key(c, &start_key, key_inum(c, key));
2763
2764                 err = ubifs_lookup_level0(c, &start_key, &znode, &n);
2765                 if (unlikely(err < 0))
2766                         goto out_free;
2767
2768                 err = search_dh_cookie(c, key, dent, cookie, &znode, &n, err);
2769                 if (err)
2770                         goto out_free;
2771         }
2772
2773         if (znode->cnext || !ubifs_zn_dirty(znode)) {
2774                 znode = dirty_cow_bottom_up(c, znode);
2775                 if (IS_ERR(znode)) {
2776                         err = PTR_ERR(znode);
2777                         goto out_free;
2778                 }
2779         }
2780         err = tnc_delete(c, znode, n);
2781
2782 out_free:
2783         kfree(dent);
2784 out_unlock:
2785         if (!err)
2786                 err = dbg_check_tnc(c, 0);
2787         mutex_unlock(&c->tnc_mutex);
2788         return err;
2789 }
2790
2791 /**
2792  * key_in_range - determine if a key falls within a range of keys.
2793  * @c: UBIFS file-system description object
2794  * @key: key to check
2795  * @from_key: lowest key in range
2796  * @to_key: highest key in range
2797  *
2798  * This function returns %1 if the key is in range and %0 otherwise.
2799  */
2800 static int key_in_range(struct ubifs_info *c, union ubifs_key *key,
2801                         union ubifs_key *from_key, union ubifs_key *to_key)
2802 {
2803         if (keys_cmp(c, key, from_key) < 0)
2804                 return 0;
2805         if (keys_cmp(c, key, to_key) > 0)
2806                 return 0;
2807         return 1;
2808 }
2809
2810 /**
2811  * ubifs_tnc_remove_range - remove index entries in range.
2812  * @c: UBIFS file-system description object
2813  * @from_key: lowest key to remove
2814  * @to_key: highest key to remove
2815  *
2816  * This function removes index entries starting at @from_key and ending at
2817  * @to_key.  This function returns zero in case of success and a negative error
2818  * code in case of failure.
2819  */
2820 int ubifs_tnc_remove_range(struct ubifs_info *c, union ubifs_key *from_key,
2821                            union ubifs_key *to_key)
2822 {
2823         int i, n, k, err = 0;
2824         struct ubifs_znode *znode;
2825         union ubifs_key *key;
2826
2827         mutex_lock(&c->tnc_mutex);
2828         while (1) {
2829                 /* Find first level 0 znode that contains keys to remove */
2830                 err = ubifs_lookup_level0(c, from_key, &znode, &n);
2831                 if (err < 0)
2832                         goto out_unlock;
2833
2834                 if (err)
2835                         key = from_key;
2836                 else {
2837                         err = tnc_next(c, &znode, &n);
2838                         if (err == -ENOENT) {
2839                                 err = 0;
2840                                 goto out_unlock;
2841                         }
2842                         if (err < 0)
2843                                 goto out_unlock;
2844                         key = &znode->zbranch[n].key;
2845                         if (!key_in_range(c, key, from_key, to_key)) {
2846                                 err = 0;
2847                                 goto out_unlock;
2848                         }
2849                 }
2850
2851                 /* Ensure the znode is dirtied */
2852                 if (znode->cnext || !ubifs_zn_dirty(znode)) {
2853                         znode = dirty_cow_bottom_up(c, znode);
2854                         if (IS_ERR(znode)) {
2855                                 err = PTR_ERR(znode);
2856                                 goto out_unlock;
2857                         }
2858                 }
2859
2860                 /* Remove all keys in range except the first */
2861                 for (i = n + 1, k = 0; i < znode->child_cnt; i++, k++) {
2862                         key = &znode->zbranch[i].key;
2863                         if (!key_in_range(c, key, from_key, to_key))
2864                                 break;
2865                         lnc_free(&znode->zbranch[i]);
2866                         err = ubifs_add_dirt(c, znode->zbranch[i].lnum,
2867                                              znode->zbranch[i].len);
2868                         if (err) {
2869                                 ubifs_dump_znode(c, znode);
2870                                 goto out_unlock;
2871                         }
2872                         dbg_tnck(key, "removing key ");
2873                 }
2874                 if (k) {
2875                         for (i = n + 1 + k; i < znode->child_cnt; i++)
2876                                 znode->zbranch[i - k] = znode->zbranch[i];
2877                         znode->child_cnt -= k;
2878                 }
2879
2880                 /* Now delete the first */
2881                 err = tnc_delete(c, znode, n);
2882                 if (err)
2883                         goto out_unlock;
2884         }
2885
2886 out_unlock:
2887         if (!err)
2888                 err = dbg_check_tnc(c, 0);
2889         mutex_unlock(&c->tnc_mutex);
2890         return err;
2891 }
2892
2893 /**
2894  * ubifs_tnc_remove_ino - remove an inode from TNC.
2895  * @c: UBIFS file-system description object
2896  * @inum: inode number to remove
2897  *
2898  * This function remove inode @inum and all the extended attributes associated
2899  * with the anode from TNC and returns zero in case of success or a negative
2900  * error code in case of failure.
2901  */
2902 int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum)
2903 {
2904         union ubifs_key key1, key2;
2905         struct ubifs_dent_node *xent, *pxent = NULL;
2906         struct fscrypt_name nm = {0};
2907
2908         dbg_tnc("ino %lu", (unsigned long)inum);
2909
2910         /*
2911          * Walk all extended attribute entries and remove them together with
2912          * corresponding extended attribute inodes.
2913          */
2914         lowest_xent_key(c, &key1, inum);
2915         while (1) {
2916                 ino_t xattr_inum;
2917                 int err;
2918
2919                 xent = ubifs_tnc_next_ent(c, &key1, &nm);
2920                 if (IS_ERR(xent)) {
2921                         err = PTR_ERR(xent);
2922                         if (err == -ENOENT)
2923                                 break;
2924                         kfree(pxent);
2925                         return err;
2926                 }
2927
2928                 xattr_inum = le64_to_cpu(xent->inum);
2929                 dbg_tnc("xent '%s', ino %lu", xent->name,
2930                         (unsigned long)xattr_inum);
2931
2932                 ubifs_evict_xattr_inode(c, xattr_inum);
2933
2934                 fname_name(&nm) = xent->name;
2935                 fname_len(&nm) = le16_to_cpu(xent->nlen);
2936                 err = ubifs_tnc_remove_nm(c, &key1, &nm);
2937                 if (err) {
2938                         kfree(pxent);
2939                         kfree(xent);
2940                         return err;
2941                 }
2942
2943                 lowest_ino_key(c, &key1, xattr_inum);
2944                 highest_ino_key(c, &key2, xattr_inum);
2945                 err = ubifs_tnc_remove_range(c, &key1, &key2);
2946                 if (err) {
2947                         kfree(pxent);
2948                         kfree(xent);
2949                         return err;
2950                 }
2951
2952                 kfree(pxent);
2953                 pxent = xent;
2954                 key_read(c, &xent->key, &key1);
2955         }
2956
2957         kfree(pxent);
2958         lowest_ino_key(c, &key1, inum);
2959         highest_ino_key(c, &key2, inum);
2960
2961         return ubifs_tnc_remove_range(c, &key1, &key2);
2962 }
2963
2964 /**
2965  * ubifs_tnc_next_ent - walk directory or extended attribute entries.
2966  * @c: UBIFS file-system description object
2967  * @key: key of last entry
2968  * @nm: name of last entry found or %NULL
2969  *
2970  * This function finds and reads the next directory or extended attribute entry
2971  * after the given key (@key) if there is one. @nm is used to resolve
2972  * collisions.
2973  *
2974  * If the name of the current entry is not known and only the key is known,
2975  * @nm->name has to be %NULL. In this case the semantics of this function is a
2976  * little bit different and it returns the entry corresponding to this key, not
2977  * the next one. If the key was not found, the closest "right" entry is
2978  * returned.
2979  *
2980  * If the fist entry has to be found, @key has to contain the lowest possible
2981  * key value for this inode and @name has to be %NULL.
2982  *
2983  * This function returns the found directory or extended attribute entry node
2984  * in case of success, %-ENOENT is returned if no entry was found, and a
2985  * negative error code is returned in case of failure.
2986  */
2987 struct ubifs_dent_node *ubifs_tnc_next_ent(struct ubifs_info *c,
2988                                            union ubifs_key *key,
2989                                            const struct fscrypt_name *nm)
2990 {
2991         int n, err, type = key_type(c, key);
2992         struct ubifs_znode *znode;
2993         struct ubifs_dent_node *dent;
2994         struct ubifs_zbranch *zbr;
2995         union ubifs_key *dkey;
2996
2997         dbg_tnck(key, "key ");
2998         ubifs_assert(c, is_hash_key(c, key));
2999
3000         mutex_lock(&c->tnc_mutex);
3001         err = ubifs_lookup_level0(c, key, &znode, &n);
3002         if (unlikely(err < 0))
3003                 goto out_unlock;
3004
3005         if (fname_len(nm) > 0) {
3006                 if (err) {
3007                         /* Handle collisions */
3008                         if (c->replaying)
3009                                 err = fallible_resolve_collision(c, key, &znode, &n,
3010                                                          nm, 0);
3011                         else
3012                                 err = resolve_collision(c, key, &znode, &n, nm);
3013                         dbg_tnc("rc returned %d, znode %p, n %d",
3014                                 err, znode, n);
3015                         if (unlikely(err < 0))
3016                                 goto out_unlock;
3017                 }
3018
3019                 /* Now find next entry */
3020                 err = tnc_next(c, &znode, &n);
3021                 if (unlikely(err))
3022                         goto out_unlock;
3023         } else {
3024                 /*
3025                  * The full name of the entry was not given, in which case the
3026                  * behavior of this function is a little different and it
3027                  * returns current entry, not the next one.
3028                  */
3029                 if (!err) {
3030                         /*
3031                          * However, the given key does not exist in the TNC
3032                          * tree and @znode/@n variables contain the closest
3033                          * "preceding" element. Switch to the next one.
3034                          */
3035                         err = tnc_next(c, &znode, &n);
3036                         if (err)
3037                                 goto out_unlock;
3038                 }
3039         }
3040
3041         zbr = &znode->zbranch[n];
3042         dent = kmalloc(zbr->len, GFP_NOFS);
3043         if (unlikely(!dent)) {
3044                 err = -ENOMEM;
3045                 goto out_unlock;
3046         }
3047
3048         /*
3049          * The above 'tnc_next()' call could lead us to the next inode, check
3050          * this.
3051          */
3052         dkey = &zbr->key;
3053         if (key_inum(c, dkey) != key_inum(c, key) ||
3054             key_type(c, dkey) != type) {
3055                 err = -ENOENT;
3056                 goto out_free;
3057         }
3058
3059         err = tnc_read_hashed_node(c, zbr, dent);
3060         if (unlikely(err))
3061                 goto out_free;
3062
3063         mutex_unlock(&c->tnc_mutex);
3064         return dent;
3065
3066 out_free:
3067         kfree(dent);
3068 out_unlock:
3069         mutex_unlock(&c->tnc_mutex);
3070         return ERR_PTR(err);
3071 }
3072
3073 /**
3074  * tnc_destroy_cnext - destroy left-over obsolete znodes from a failed commit.
3075  * @c: UBIFS file-system description object
3076  *
3077  * Destroy left-over obsolete znodes from a failed commit.
3078  */
3079 static void tnc_destroy_cnext(struct ubifs_info *c)
3080 {
3081         struct ubifs_znode *cnext;
3082
3083         if (!c->cnext)
3084                 return;
3085         ubifs_assert(c, c->cmt_state == COMMIT_BROKEN);
3086         cnext = c->cnext;
3087         do {
3088                 struct ubifs_znode *znode = cnext;
3089
3090                 cnext = cnext->cnext;
3091                 if (ubifs_zn_obsolete(znode))
3092                         kfree(znode);
3093                 else if (!ubifs_zn_cow(znode)) {
3094                         /*
3095                          * Don't forget to update clean znode count after
3096                          * committing failed, because ubifs will check this
3097                          * count while closing tnc. Non-obsolete znode could
3098                          * be re-dirtied during committing process, so dirty
3099                          * flag is untrustable. The flag 'COW_ZNODE' is set
3100                          * for each dirty znode before committing, and it is
3101                          * cleared as long as the znode become clean, so we
3102                          * can statistic clean znode count according to this
3103                          * flag.
3104                          */
3105                         atomic_long_inc(&c->clean_zn_cnt);
3106                         atomic_long_inc(&ubifs_clean_zn_cnt);
3107                 }
3108         } while (cnext && cnext != c->cnext);
3109 }
3110
3111 /**
3112  * ubifs_tnc_close - close TNC subsystem and free all related resources.
3113  * @c: UBIFS file-system description object
3114  */
3115 void ubifs_tnc_close(struct ubifs_info *c)
3116 {
3117         tnc_destroy_cnext(c);
3118         if (c->zroot.znode) {
3119                 long n, freed;
3120
3121                 n = atomic_long_read(&c->clean_zn_cnt);
3122                 freed = ubifs_destroy_tnc_subtree(c, c->zroot.znode);
3123                 ubifs_assert(c, freed == n);
3124                 atomic_long_sub(n, &ubifs_clean_zn_cnt);
3125         }
3126         kfree(c->gap_lebs);
3127         kfree(c->ilebs);
3128         destroy_old_idx(c);
3129 }
3130
3131 /**
3132  * left_znode - get the znode to the left.
3133  * @c: UBIFS file-system description object
3134  * @znode: znode
3135  *
3136  * This function returns a pointer to the znode to the left of @znode or NULL if
3137  * there is not one. A negative error code is returned on failure.
3138  */
3139 static struct ubifs_znode *left_znode(struct ubifs_info *c,
3140                                       struct ubifs_znode *znode)
3141 {
3142         int level = znode->level;
3143
3144         while (1) {
3145                 int n = znode->iip - 1;
3146
3147                 /* Go up until we can go left */
3148                 znode = znode->parent;
3149                 if (!znode)
3150                         return NULL;
3151                 if (n >= 0) {
3152                         /* Now go down the rightmost branch to 'level' */
3153                         znode = get_znode(c, znode, n);
3154                         if (IS_ERR(znode))
3155                                 return znode;
3156                         while (znode->level != level) {
3157                                 n = znode->child_cnt - 1;
3158                                 znode = get_znode(c, znode, n);
3159                                 if (IS_ERR(znode))
3160                                         return znode;
3161                         }
3162                         break;
3163                 }
3164         }
3165         return znode;
3166 }
3167
3168 /**
3169  * right_znode - get the znode to the right.
3170  * @c: UBIFS file-system description object
3171  * @znode: znode
3172  *
3173  * This function returns a pointer to the znode to the right of @znode or NULL
3174  * if there is not one. A negative error code is returned on failure.
3175  */
3176 static struct ubifs_znode *right_znode(struct ubifs_info *c,
3177                                        struct ubifs_znode *znode)
3178 {
3179         int level = znode->level;
3180
3181         while (1) {
3182                 int n = znode->iip + 1;
3183
3184                 /* Go up until we can go right */
3185                 znode = znode->parent;
3186                 if (!znode)
3187                         return NULL;
3188                 if (n < znode->child_cnt) {
3189                         /* Now go down the leftmost branch to 'level' */
3190                         znode = get_znode(c, znode, n);
3191                         if (IS_ERR(znode))
3192                                 return znode;
3193                         while (znode->level != level) {
3194                                 znode = get_znode(c, znode, 0);
3195                                 if (IS_ERR(znode))
3196                                         return znode;
3197                         }
3198                         break;
3199                 }
3200         }
3201         return znode;
3202 }
3203
3204 /**
3205  * lookup_znode - find a particular indexing node from TNC.
3206  * @c: UBIFS file-system description object
3207  * @key: index node key to lookup
3208  * @level: index node level
3209  * @lnum: index node LEB number
3210  * @offs: index node offset
3211  *
3212  * This function searches an indexing node by its first key @key and its
3213  * address @lnum:@offs. It looks up the indexing tree by pulling all indexing
3214  * nodes it traverses to TNC. This function is called for indexing nodes which
3215  * were found on the media by scanning, for example when garbage-collecting or
3216  * when doing in-the-gaps commit. This means that the indexing node which is
3217  * looked for does not have to have exactly the same leftmost key @key, because
3218  * the leftmost key may have been changed, in which case TNC will contain a
3219  * dirty znode which still refers the same @lnum:@offs. This function is clever
3220  * enough to recognize such indexing nodes.
3221  *
3222  * Note, if a znode was deleted or changed too much, then this function will
3223  * not find it. For situations like this UBIFS has the old index RB-tree
3224  * (indexed by @lnum:@offs).
3225  *
3226  * This function returns a pointer to the znode found or %NULL if it is not
3227  * found. A negative error code is returned on failure.
3228  */
3229 static struct ubifs_znode *lookup_znode(struct ubifs_info *c,
3230                                         union ubifs_key *key, int level,
3231                                         int lnum, int offs)
3232 {
3233         struct ubifs_znode *znode, *zn;
3234         int n, nn;
3235
3236         ubifs_assert(c, key_type(c, key) < UBIFS_INVALID_KEY);
3237
3238         /*
3239          * The arguments have probably been read off flash, so don't assume
3240          * they are valid.
3241          */
3242         if (level < 0)
3243                 return ERR_PTR(-EINVAL);
3244
3245         /* Get the root znode */
3246         znode = c->zroot.znode;
3247         if (!znode) {
3248                 znode = ubifs_load_znode(c, &c->zroot, NULL, 0);
3249                 if (IS_ERR(znode))
3250                         return znode;
3251         }
3252         /* Check if it is the one we are looking for */
3253         if (c->zroot.lnum == lnum && c->zroot.offs == offs)
3254                 return znode;
3255         /* Descend to the parent level i.e. (level + 1) */
3256         if (level >= znode->level)
3257                 return NULL;
3258         while (1) {
3259                 ubifs_search_zbranch(c, znode, key, &n);
3260                 if (n < 0) {
3261                         /*
3262                          * We reached a znode where the leftmost key is greater
3263                          * than the key we are searching for. This is the same
3264                          * situation as the one described in a huge comment at
3265                          * the end of the 'ubifs_lookup_level0()' function. And
3266                          * for exactly the same reasons we have to try to look
3267                          * left before giving up.
3268                          */
3269                         znode = left_znode(c, znode);
3270                         if (!znode)
3271                                 return NULL;
3272                         if (IS_ERR(znode))
3273                                 return znode;
3274                         ubifs_search_zbranch(c, znode, key, &n);
3275                         ubifs_assert(c, n >= 0);
3276                 }
3277                 if (znode->level == level + 1)
3278                         break;
3279                 znode = get_znode(c, znode, n);
3280                 if (IS_ERR(znode))
3281                         return znode;
3282         }
3283         /* Check if the child is the one we are looking for */
3284         if (znode->zbranch[n].lnum == lnum && znode->zbranch[n].offs == offs)
3285                 return get_znode(c, znode, n);
3286         /* If the key is unique, there is nowhere else to look */
3287         if (!is_hash_key(c, key))
3288                 return NULL;
3289         /*
3290          * The key is not unique and so may be also in the znodes to either
3291          * side.
3292          */
3293         zn = znode;
3294         nn = n;
3295         /* Look left */
3296         while (1) {
3297                 /* Move one branch to the left */
3298                 if (n)
3299                         n -= 1;
3300                 else {
3301                         znode = left_znode(c, znode);
3302                         if (!znode)
3303                                 break;
3304                         if (IS_ERR(znode))
3305                                 return znode;
3306                         n = znode->child_cnt - 1;
3307                 }
3308                 /* Check it */
3309                 if (znode->zbranch[n].lnum == lnum &&
3310                     znode->zbranch[n].offs == offs)
3311                         return get_znode(c, znode, n);
3312                 /* Stop if the key is less than the one we are looking for */
3313                 if (keys_cmp(c, &znode->zbranch[n].key, key) < 0)
3314                         break;
3315         }
3316         /* Back to the middle */
3317         znode = zn;
3318         n = nn;
3319         /* Look right */
3320         while (1) {
3321                 /* Move one branch to the right */
3322                 if (++n >= znode->child_cnt) {
3323                         znode = right_znode(c, znode);
3324                         if (!znode)
3325                                 break;
3326                         if (IS_ERR(znode))
3327                                 return znode;
3328                         n = 0;
3329                 }
3330                 /* Check it */
3331                 if (znode->zbranch[n].lnum == lnum &&
3332                     znode->zbranch[n].offs == offs)
3333                         return get_znode(c, znode, n);
3334                 /* Stop if the key is greater than the one we are looking for */
3335                 if (keys_cmp(c, &znode->zbranch[n].key, key) > 0)
3336                         break;
3337         }
3338         return NULL;
3339 }
3340
3341 /**
3342  * is_idx_node_in_tnc - determine if an index node is in the TNC.
3343  * @c: UBIFS file-system description object
3344  * @key: key of index node
3345  * @level: index node level
3346  * @lnum: LEB number of index node
3347  * @offs: offset of index node
3348  *
3349  * This function returns %0 if the index node is not referred to in the TNC, %1
3350  * if the index node is referred to in the TNC and the corresponding znode is
3351  * dirty, %2 if an index node is referred to in the TNC and the corresponding
3352  * znode is clean, and a negative error code in case of failure.
3353  *
3354  * Note, the @key argument has to be the key of the first child. Also note,
3355  * this function relies on the fact that 0:0 is never a valid LEB number and
3356  * offset for a main-area node.
3357  */
3358 int is_idx_node_in_tnc(struct ubifs_info *c, union ubifs_key *key, int level,
3359                        int lnum, int offs)
3360 {
3361         struct ubifs_znode *znode;
3362
3363         znode = lookup_znode(c, key, level, lnum, offs);
3364         if (!znode)
3365                 return 0;
3366         if (IS_ERR(znode))
3367                 return PTR_ERR(znode);
3368
3369         return ubifs_zn_dirty(znode) ? 1 : 2;
3370 }
3371
3372 /**
3373  * is_leaf_node_in_tnc - determine if a non-indexing not is in the TNC.
3374  * @c: UBIFS file-system description object
3375  * @key: node key
3376  * @lnum: node LEB number
3377  * @offs: node offset
3378  *
3379  * This function returns %1 if the node is referred to in the TNC, %0 if it is
3380  * not, and a negative error code in case of failure.
3381  *
3382  * Note, this function relies on the fact that 0:0 is never a valid LEB number
3383  * and offset for a main-area node.
3384  */
3385 static int is_leaf_node_in_tnc(struct ubifs_info *c, union ubifs_key *key,
3386                                int lnum, int offs)
3387 {
3388         struct ubifs_zbranch *zbr;
3389         struct ubifs_znode *znode, *zn;
3390         int n, found, err, nn;
3391         const int unique = !is_hash_key(c, key);
3392
3393         found = ubifs_lookup_level0(c, key, &znode, &n);
3394         if (found < 0)
3395                 return found; /* Error code */
3396         if (!found)
3397                 return 0;
3398         zbr = &znode->zbranch[n];
3399         if (lnum == zbr->lnum && offs == zbr->offs)
3400                 return 1; /* Found it */
3401         if (unique)
3402                 return 0;
3403         /*
3404          * Because the key is not unique, we have to look left
3405          * and right as well
3406          */
3407         zn = znode;
3408         nn = n;
3409         /* Look left */
3410         while (1) {
3411                 err = tnc_prev(c, &znode, &n);
3412                 if (err == -ENOENT)
3413                         break;
3414                 if (err)
3415                         return err;
3416                 if (keys_cmp(c, key, &znode->zbranch[n].key))
3417                         break;
3418                 zbr = &znode->zbranch[n];
3419                 if (lnum == zbr->lnum && offs == zbr->offs)
3420                         return 1; /* Found it */
3421         }
3422         /* Look right */
3423         znode = zn;
3424         n = nn;
3425         while (1) {
3426                 err = tnc_next(c, &znode, &n);
3427                 if (err) {
3428                         if (err == -ENOENT)
3429                                 return 0;
3430                         return err;
3431                 }
3432                 if (keys_cmp(c, key, &znode->zbranch[n].key))
3433                         break;
3434                 zbr = &znode->zbranch[n];
3435                 if (lnum == zbr->lnum && offs == zbr->offs)
3436                         return 1; /* Found it */
3437         }
3438         return 0;
3439 }
3440
3441 /**
3442  * ubifs_tnc_has_node - determine whether a node is in the TNC.
3443  * @c: UBIFS file-system description object
3444  * @key: node key
3445  * @level: index node level (if it is an index node)
3446  * @lnum: node LEB number
3447  * @offs: node offset
3448  * @is_idx: non-zero if the node is an index node
3449  *
3450  * This function returns %1 if the node is in the TNC, %0 if it is not, and a
3451  * negative error code in case of failure. For index nodes, @key has to be the
3452  * key of the first child. An index node is considered to be in the TNC only if
3453  * the corresponding znode is clean or has not been loaded.
3454  */
3455 int ubifs_tnc_has_node(struct ubifs_info *c, union ubifs_key *key, int level,
3456                        int lnum, int offs, int is_idx)
3457 {
3458         int err;
3459
3460         mutex_lock(&c->tnc_mutex);
3461         if (is_idx) {
3462                 err = is_idx_node_in_tnc(c, key, level, lnum, offs);
3463                 if (err < 0)
3464                         goto out_unlock;
3465                 if (err == 1)
3466                         /* The index node was found but it was dirty */
3467                         err = 0;
3468                 else if (err == 2)
3469                         /* The index node was found and it was clean */
3470                         err = 1;
3471                 else
3472                         BUG_ON(err != 0);
3473         } else
3474                 err = is_leaf_node_in_tnc(c, key, lnum, offs);
3475
3476 out_unlock:
3477         mutex_unlock(&c->tnc_mutex);
3478         return err;
3479 }
3480
3481 /**
3482  * ubifs_dirty_idx_node - dirty an index node.
3483  * @c: UBIFS file-system description object
3484  * @key: index node key
3485  * @level: index node level
3486  * @lnum: index node LEB number
3487  * @offs: index node offset
3488  *
3489  * This function loads and dirties an index node so that it can be garbage
3490  * collected. The @key argument has to be the key of the first child. This
3491  * function relies on the fact that 0:0 is never a valid LEB number and offset
3492  * for a main-area node. Returns %0 on success and a negative error code on
3493  * failure.
3494  */
3495 int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level,
3496                          int lnum, int offs)
3497 {
3498         struct ubifs_znode *znode;
3499         int err = 0;
3500
3501         mutex_lock(&c->tnc_mutex);
3502         znode = lookup_znode(c, key, level, lnum, offs);
3503         if (!znode)
3504                 goto out_unlock;
3505         if (IS_ERR(znode)) {
3506                 err = PTR_ERR(znode);
3507                 goto out_unlock;
3508         }
3509         znode = dirty_cow_bottom_up(c, znode);
3510         if (IS_ERR(znode)) {
3511                 err = PTR_ERR(znode);
3512                 goto out_unlock;
3513         }
3514
3515 out_unlock:
3516         mutex_unlock(&c->tnc_mutex);
3517         return err;
3518 }
3519
3520 /**
3521  * dbg_check_inode_size - check if inode size is correct.
3522  * @c: UBIFS file-system description object
3523  * @inode: inode to check
3524  * @size: inode size
3525  *
3526  * This function makes sure that the inode size (@size) is correct and it does
3527  * not have any pages beyond @size. Returns zero if the inode is OK, %-EINVAL
3528  * if it has a data page beyond @size, and other negative error code in case of
3529  * other errors.
3530  */
3531 int dbg_check_inode_size(struct ubifs_info *c, const struct inode *inode,
3532                          loff_t size)
3533 {
3534         int err, n;
3535         union ubifs_key from_key, to_key, *key;
3536         struct ubifs_znode *znode;
3537         unsigned int block;
3538
3539         if (!S_ISREG(inode->i_mode))
3540                 return 0;
3541         if (!dbg_is_chk_gen(c))
3542                 return 0;
3543
3544         block = (size + UBIFS_BLOCK_SIZE - 1) >> UBIFS_BLOCK_SHIFT;
3545         data_key_init(c, &from_key, inode->i_ino, block);
3546         highest_data_key(c, &to_key, inode->i_ino);
3547
3548         mutex_lock(&c->tnc_mutex);
3549         err = ubifs_lookup_level0(c, &from_key, &znode, &n);
3550         if (err < 0)
3551                 goto out_unlock;
3552
3553         if (err) {
3554                 key = &from_key;
3555                 goto out_dump;
3556         }
3557
3558         err = tnc_next(c, &znode, &n);
3559         if (err == -ENOENT) {
3560                 err = 0;
3561                 goto out_unlock;
3562         }
3563         if (err < 0)
3564                 goto out_unlock;
3565
3566         ubifs_assert(c, err == 0);
3567         key = &znode->zbranch[n].key;
3568         if (!key_in_range(c, key, &from_key, &to_key))
3569                 goto out_unlock;
3570
3571 out_dump:
3572         block = key_block(c, key);
3573         ubifs_err(c, "inode %lu has size %lld, but there are data at offset %lld",
3574                   (unsigned long)inode->i_ino, size,
3575                   ((loff_t)block) << UBIFS_BLOCK_SHIFT);
3576         mutex_unlock(&c->tnc_mutex);
3577         ubifs_dump_inode(c, inode);
3578         dump_stack();
3579         return -EINVAL;
3580
3581 out_unlock:
3582         mutex_unlock(&c->tnc_mutex);
3583         return err;
3584 }