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