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