1 // SPDX-License-Identifier: GPL-2.0-only
3 * This file is part of UBIFS.
5 * Copyright (C) 2006-2008 Nokia Corporation.
7 * Authors: Adrian Hunter
8 * Artem Bityutskiy (Битюцкий Артём)
12 * This file implements TNC (Tree Node Cache) which caches indexing nodes of
15 * At the moment the locking rules of the TNC tree are quite simple and
16 * straightforward. We just have a mutex and lock it when we traverse the
17 * tree. If a znode is not in memory, we read it from flash while still having
21 #include <linux/crc32.h>
22 #include <linux/slab.h>
25 static int try_read_node(const struct ubifs_info
*c
, void *buf
, int type
,
26 struct ubifs_zbranch
*zbr
);
27 static int fallible_read_node(struct ubifs_info
*c
, const union ubifs_key
*key
,
28 struct ubifs_zbranch
*zbr
, void *node
);
31 * Returned codes of 'matches_name()' and 'fallible_matches_name()' functions.
32 * @NAME_LESS: name corresponding to the first argument is less than second
33 * @NAME_MATCHES: names match
34 * @NAME_GREATER: name corresponding to the second argument is greater than
36 * @NOT_ON_MEDIA: node referred by zbranch does not exist on the media
38 * These constants were introduce to improve readability.
47 static void do_insert_old_idx(struct ubifs_info
*c
,
48 struct ubifs_old_idx
*old_idx
)
50 struct ubifs_old_idx
*o
;
51 struct rb_node
**p
, *parent
= NULL
;
53 p
= &c
->old_idx
.rb_node
;
56 o
= rb_entry(parent
, struct ubifs_old_idx
, rb
);
57 if (old_idx
->lnum
< o
->lnum
)
59 else if (old_idx
->lnum
> o
->lnum
)
61 else if (old_idx
->offs
< o
->offs
)
63 else if (old_idx
->offs
> o
->offs
)
66 ubifs_err(c
, "old idx added twice!");
71 rb_link_node(&old_idx
->rb
, parent
, p
);
72 rb_insert_color(&old_idx
->rb
, &c
->old_idx
);
76 * insert_old_idx - record an index node obsoleted since the last commit start.
77 * @c: UBIFS file-system description object
78 * @lnum: LEB number of obsoleted index node
79 * @offs: offset of obsoleted index node
81 * Returns %0 on success, and a negative error code on failure.
83 * For recovery, there must always be a complete intact version of the index on
84 * flash at all times. That is called the "old index". It is the index as at the
85 * time of the last successful commit. Many of the index nodes in the old index
86 * may be dirty, but they must not be erased until the next successful commit
87 * (at which point that index becomes the old index).
89 * That means that the garbage collection and the in-the-gaps method of
90 * committing must be able to determine if an index node is in the old index.
91 * Most of the old index nodes can be found by looking up the TNC using the
92 * 'lookup_znode()' function. However, some of the old index nodes may have
93 * been deleted from the current index or may have been changed so much that
94 * they cannot be easily found. In those cases, an entry is added to an RB-tree.
95 * That is what this function does. The RB-tree is ordered by LEB number and
96 * offset because they uniquely identify the old index node.
98 static int insert_old_idx(struct ubifs_info
*c
, int lnum
, int offs
)
100 struct ubifs_old_idx
*old_idx
;
102 old_idx
= kmalloc(sizeof(struct ubifs_old_idx
), GFP_NOFS
);
103 if (unlikely(!old_idx
))
105 old_idx
->lnum
= lnum
;
106 old_idx
->offs
= offs
;
107 do_insert_old_idx(c
, old_idx
);
113 * insert_old_idx_znode - record a znode obsoleted since last commit start.
114 * @c: UBIFS file-system description object
115 * @znode: znode of obsoleted index node
117 * Returns %0 on success, and a negative error code on failure.
119 int insert_old_idx_znode(struct ubifs_info
*c
, struct ubifs_znode
*znode
)
122 struct ubifs_zbranch
*zbr
;
124 zbr
= &znode
->parent
->zbranch
[znode
->iip
];
126 return insert_old_idx(c
, zbr
->lnum
, zbr
->offs
);
129 return insert_old_idx(c
, c
->zroot
.lnum
,
135 * ins_clr_old_idx_znode - record a znode obsoleted since last commit start.
136 * @c: UBIFS file-system description object
137 * @znode: znode of obsoleted index node
139 * Returns %0 on success, and a negative error code on failure.
141 static int ins_clr_old_idx_znode(struct ubifs_info
*c
,
142 struct ubifs_znode
*znode
)
147 struct ubifs_zbranch
*zbr
;
149 zbr
= &znode
->parent
->zbranch
[znode
->iip
];
151 err
= insert_old_idx(c
, zbr
->lnum
, zbr
->offs
);
160 err
= insert_old_idx(c
, c
->zroot
.lnum
, c
->zroot
.offs
);
171 * destroy_old_idx - destroy the old_idx RB-tree.
172 * @c: UBIFS file-system description object
174 * During start commit, the old_idx RB-tree is used to avoid overwriting index
175 * nodes that were in the index last commit but have since been deleted. This
176 * is necessary for recovery i.e. the old index must be kept intact until the
177 * new index is successfully written. The old-idx RB-tree is used for the
178 * in-the-gaps method of writing index nodes and is destroyed every commit.
180 void destroy_old_idx(struct ubifs_info
*c
)
182 struct ubifs_old_idx
*old_idx
, *n
;
184 rbtree_postorder_for_each_entry_safe(old_idx
, n
, &c
->old_idx
, rb
)
187 c
->old_idx
= RB_ROOT
;
191 * copy_znode - copy a dirty znode.
192 * @c: UBIFS file-system description object
193 * @znode: znode to copy
195 * A dirty znode being committed may not be changed, so it is copied.
197 static struct ubifs_znode
*copy_znode(struct ubifs_info
*c
,
198 struct ubifs_znode
*znode
)
200 struct ubifs_znode
*zn
;
202 zn
= kmemdup(znode
, c
->max_znode_sz
, GFP_NOFS
);
204 return ERR_PTR(-ENOMEM
);
207 __set_bit(DIRTY_ZNODE
, &zn
->flags
);
208 __clear_bit(COW_ZNODE
, &zn
->flags
);
214 * add_idx_dirt - add dirt due to a dirty znode.
215 * @c: UBIFS file-system description object
216 * @lnum: LEB number of index node
217 * @dirt: size of index node
219 * This function updates lprops dirty space and the new size of the index.
221 static int add_idx_dirt(struct ubifs_info
*c
, int lnum
, int dirt
)
223 c
->calc_idx_sz
-= ALIGN(dirt
, 8);
224 return ubifs_add_dirt(c
, lnum
, dirt
);
228 * replace_znode - replace old znode with new znode.
229 * @c: UBIFS file-system description object
232 * @zbr: the branch of parent znode
234 * Replace old znode with new znode in TNC.
236 static void replace_znode(struct ubifs_info
*c
, struct ubifs_znode
*new_zn
,
237 struct ubifs_znode
*old_zn
, struct ubifs_zbranch
*zbr
)
239 ubifs_assert(c
, !ubifs_zn_obsolete(old_zn
));
240 __set_bit(OBSOLETE_ZNODE
, &old_zn
->flags
);
242 if (old_zn
->level
!= 0) {
244 const int n
= new_zn
->child_cnt
;
246 /* The children now have new parent */
247 for (i
= 0; i
< n
; i
++) {
248 struct ubifs_zbranch
*child
= &new_zn
->zbranch
[i
];
251 child
->znode
->parent
= new_zn
;
260 atomic_long_inc(&c
->dirty_zn_cnt
);
264 * dirty_cow_znode - ensure a znode is not being committed.
265 * @c: UBIFS file-system description object
266 * @zbr: branch of znode to check
268 * Returns dirtied znode on success or negative error code on failure.
270 static struct ubifs_znode
*dirty_cow_znode(struct ubifs_info
*c
,
271 struct ubifs_zbranch
*zbr
)
273 struct ubifs_znode
*znode
= zbr
->znode
;
274 struct ubifs_znode
*zn
;
277 if (!ubifs_zn_cow(znode
)) {
278 /* znode is not being committed */
279 if (!test_and_set_bit(DIRTY_ZNODE
, &znode
->flags
)) {
280 atomic_long_inc(&c
->dirty_zn_cnt
);
281 atomic_long_dec(&c
->clean_zn_cnt
);
282 atomic_long_dec(&ubifs_clean_zn_cnt
);
283 err
= add_idx_dirt(c
, zbr
->lnum
, zbr
->len
);
290 zn
= copy_znode(c
, znode
);
295 struct ubifs_old_idx
*old_idx
;
297 old_idx
= kmalloc(sizeof(struct ubifs_old_idx
), GFP_NOFS
);
298 if (unlikely(!old_idx
)) {
302 old_idx
->lnum
= zbr
->lnum
;
303 old_idx
->offs
= zbr
->offs
;
305 err
= add_idx_dirt(c
, zbr
->lnum
, zbr
->len
);
311 do_insert_old_idx(c
, old_idx
);
314 replace_znode(c
, zn
, znode
, zbr
);
324 * lnc_add - add a leaf node to the leaf node cache.
325 * @c: UBIFS file-system description object
326 * @zbr: zbranch of leaf node
329 * Leaf nodes are non-index nodes directory entry nodes or data nodes. The
330 * purpose of the leaf node cache is to save re-reading the same leaf node over
331 * and over again. Most things are cached by VFS, however the file system must
332 * cache directory entries for readdir and for resolving hash collisions. The
333 * present implementation of the leaf node cache is extremely simple, and
334 * allows for error returns that are not used but that may be needed if a more
335 * complex implementation is created.
337 * Note, this function does not add the @node object to LNC directly, but
338 * allocates a copy of the object and adds the copy to LNC. The reason for this
339 * is that @node has been allocated outside of the TNC subsystem and will be
340 * used with @c->tnc_mutex unlock upon return from the TNC subsystem. But LNC
341 * may be changed at any time, e.g. freed by the shrinker.
343 static int lnc_add(struct ubifs_info
*c
, struct ubifs_zbranch
*zbr
,
348 const struct ubifs_dent_node
*dent
= node
;
350 ubifs_assert(c
, !zbr
->leaf
);
351 ubifs_assert(c
, zbr
->len
!= 0);
352 ubifs_assert(c
, is_hash_key(c
, &zbr
->key
));
354 err
= ubifs_validate_entry(c
, dent
);
357 ubifs_dump_node(c
, dent
, zbr
->len
);
361 lnc_node
= kmemdup(node
, zbr
->len
, GFP_NOFS
);
363 /* We don't have to have the cache, so no error */
366 zbr
->leaf
= lnc_node
;
371 * lnc_add_directly - add a leaf node to the leaf-node-cache.
372 * @c: UBIFS file-system description object
373 * @zbr: zbranch of leaf node
376 * This function is similar to 'lnc_add()', but it does not create a copy of
377 * @node but inserts @node to TNC directly.
379 static int lnc_add_directly(struct ubifs_info
*c
, struct ubifs_zbranch
*zbr
,
384 ubifs_assert(c
, !zbr
->leaf
);
385 ubifs_assert(c
, zbr
->len
!= 0);
387 err
= ubifs_validate_entry(c
, node
);
390 ubifs_dump_node(c
, node
, zbr
->len
);
399 * lnc_free - remove a leaf node from the leaf node cache.
400 * @zbr: zbranch of leaf node
402 static void lnc_free(struct ubifs_zbranch
*zbr
)
411 * tnc_read_hashed_node - read a "hashed" leaf node.
412 * @c: UBIFS file-system description object
413 * @zbr: key and position of the node
414 * @node: node is returned here
416 * This function reads a "hashed" node defined by @zbr from the leaf node cache
417 * (in it is there) or from the hash media, in which case the node is also
418 * added to LNC. Returns zero in case of success or a negative error
419 * code in case of failure.
421 static int tnc_read_hashed_node(struct ubifs_info
*c
, struct ubifs_zbranch
*zbr
,
426 ubifs_assert(c
, is_hash_key(c
, &zbr
->key
));
429 /* Read from the leaf node cache */
430 ubifs_assert(c
, zbr
->len
!= 0);
431 memcpy(node
, zbr
->leaf
, zbr
->len
);
436 err
= fallible_read_node(c
, &zbr
->key
, zbr
, node
);
438 * When the node was not found, return -ENOENT, 0 otherwise.
439 * Negative return codes stay as-is.
446 err
= ubifs_tnc_read_node(c
, zbr
, node
);
451 /* Add the node to the leaf node cache */
452 err
= lnc_add(c
, zbr
, node
);
457 * try_read_node - read a node if it is a node.
458 * @c: UBIFS file-system description object
459 * @buf: buffer to read to
461 * @zbr: the zbranch describing the node to read
463 * This function tries to read a node of known type and length, checks it and
464 * stores it in @buf. This function returns %1 if a node is present and %0 if
465 * a node is not present. A negative error code is returned for I/O errors.
466 * This function performs that same function as ubifs_read_node except that
467 * it does not require that there is actually a node present and instead
468 * the return code indicates if a node was read.
470 * Note, this function does not check CRC of data nodes if @c->no_chk_data_crc
471 * is true (it is controlled by corresponding mount option). However, if
472 * @c->mounting or @c->remounting_rw is true (we are mounting or re-mounting to
473 * R/W mode), @c->no_chk_data_crc is ignored and CRC is checked. This is
474 * because during mounting or re-mounting from R/O mode to R/W mode we may read
475 * journal nodes (when replying the journal or doing the recovery) and the
476 * journal nodes may potentially be corrupted, so checking is required.
478 static int try_read_node(const struct ubifs_info
*c
, void *buf
, int type
,
479 struct ubifs_zbranch
*zbr
)
482 int lnum
= zbr
->lnum
;
483 int offs
= zbr
->offs
;
485 struct ubifs_ch
*ch
= buf
;
486 uint32_t crc
, node_crc
;
488 dbg_io("LEB %d:%d, %s, length %d", lnum
, offs
, dbg_ntype(type
), len
);
490 err
= ubifs_leb_read(c
, lnum
, buf
, offs
, len
, 1);
492 ubifs_err(c
, "cannot read node type %d from LEB %d:%d, error %d",
493 type
, lnum
, offs
, err
);
497 if (le32_to_cpu(ch
->magic
) != UBIFS_NODE_MAGIC
)
500 if (ch
->node_type
!= type
)
503 node_len
= le32_to_cpu(ch
->len
);
507 if (type
!= UBIFS_DATA_NODE
|| !c
->no_chk_data_crc
|| c
->mounting
||
509 crc
= crc32(UBIFS_CRC32_INIT
, buf
+ 8, node_len
- 8);
510 node_crc
= le32_to_cpu(ch
->crc
);
515 err
= ubifs_node_check_hash(c
, buf
, zbr
->hash
);
517 ubifs_bad_hash(c
, buf
, zbr
->hash
, lnum
, offs
);
525 * fallible_read_node - try to read a leaf node.
526 * @c: UBIFS file-system description object
527 * @key: key of node to read
528 * @zbr: position of node
529 * @node: node returned
531 * This function tries to read a node and returns %1 if the node is read, %0
532 * if the node is not present, and a negative error code in the case of error.
534 static int fallible_read_node(struct ubifs_info
*c
, const union ubifs_key
*key
,
535 struct ubifs_zbranch
*zbr
, void *node
)
539 dbg_tnck(key
, "LEB %d:%d, key ", zbr
->lnum
, zbr
->offs
);
541 ret
= try_read_node(c
, node
, key_type(c
, key
), zbr
);
543 union ubifs_key node_key
;
544 struct ubifs_dent_node
*dent
= node
;
546 /* All nodes have key in the same place */
547 key_read(c
, &dent
->key
, &node_key
);
548 if (keys_cmp(c
, key
, &node_key
) != 0)
551 if (ret
== 0 && c
->replaying
)
552 dbg_mntk(key
, "dangling branch LEB %d:%d len %d, key ",
553 zbr
->lnum
, zbr
->offs
, zbr
->len
);
558 * matches_name - determine if a direntry or xattr entry matches a given name.
559 * @c: UBIFS file-system description object
560 * @zbr: zbranch of dent
563 * This function checks if xentry/direntry referred by zbranch @zbr matches name
564 * @nm. Returns %NAME_MATCHES if it does, %NAME_LESS if the name referred by
565 * @zbr is less than @nm, and %NAME_GREATER if it is greater than @nm. In case
566 * of failure, a negative error code is returned.
568 static int matches_name(struct ubifs_info
*c
, struct ubifs_zbranch
*zbr
,
569 const struct fscrypt_name
*nm
)
571 struct ubifs_dent_node
*dent
;
574 /* If possible, match against the dent in the leaf node cache */
576 dent
= kmalloc(zbr
->len
, GFP_NOFS
);
580 err
= ubifs_tnc_read_node(c
, zbr
, dent
);
584 /* Add the node to the leaf node cache */
585 err
= lnc_add_directly(c
, zbr
, dent
);
591 nlen
= le16_to_cpu(dent
->nlen
);
592 err
= memcmp(dent
->name
, fname_name(nm
), min_t(int, nlen
, fname_len(nm
)));
594 if (nlen
== fname_len(nm
))
596 else if (nlen
< fname_len(nm
))
611 * get_znode - get a TNC znode that may not be loaded yet.
612 * @c: UBIFS file-system description object
613 * @znode: parent znode
614 * @n: znode branch slot number
616 * This function returns the znode or a negative error code.
618 static struct ubifs_znode
*get_znode(struct ubifs_info
*c
,
619 struct ubifs_znode
*znode
, int n
)
621 struct ubifs_zbranch
*zbr
;
623 zbr
= &znode
->zbranch
[n
];
627 znode
= ubifs_load_znode(c
, zbr
, znode
, n
);
632 * tnc_next - find next TNC entry.
633 * @c: UBIFS file-system description object
634 * @zn: znode is passed and returned here
635 * @n: znode branch slot number is passed and returned here
637 * This function returns %0 if the next TNC entry is found, %-ENOENT if there is
638 * no next entry, or a negative error code otherwise.
640 static int tnc_next(struct ubifs_info
*c
, struct ubifs_znode
**zn
, int *n
)
642 struct ubifs_znode
*znode
= *zn
;
646 if (nn
< znode
->child_cnt
) {
651 struct ubifs_znode
*zp
;
658 if (nn
< znode
->child_cnt
) {
659 znode
= get_znode(c
, znode
, nn
);
661 return PTR_ERR(znode
);
662 while (znode
->level
!= 0) {
663 znode
= get_znode(c
, znode
, 0);
665 return PTR_ERR(znode
);
677 * tnc_prev - find previous TNC entry.
678 * @c: UBIFS file-system description object
679 * @zn: znode is returned here
680 * @n: znode branch slot number is passed and returned here
682 * This function returns %0 if the previous TNC entry is found, %-ENOENT if
683 * there is no next entry, or a negative error code otherwise.
685 static int tnc_prev(struct ubifs_info
*c
, struct ubifs_znode
**zn
, int *n
)
687 struct ubifs_znode
*znode
= *zn
;
695 struct ubifs_znode
*zp
;
703 znode
= get_znode(c
, znode
, nn
);
705 return PTR_ERR(znode
);
706 while (znode
->level
!= 0) {
707 nn
= znode
->child_cnt
- 1;
708 znode
= get_znode(c
, znode
, nn
);
710 return PTR_ERR(znode
);
712 nn
= znode
->child_cnt
- 1;
722 * resolve_collision - resolve a collision.
723 * @c: UBIFS file-system description object
724 * @key: key of a directory or extended attribute entry
725 * @zn: znode is returned here
726 * @n: zbranch number is passed and returned here
727 * @nm: name of the entry
729 * This function is called for "hashed" keys to make sure that the found key
730 * really corresponds to the looked up node (directory or extended attribute
731 * entry). It returns %1 and sets @zn and @n if the collision is resolved.
732 * %0 is returned if @nm is not found and @zn and @n are set to the previous
733 * entry, i.e. to the entry after which @nm could follow if it were in TNC.
734 * This means that @n may be set to %-1 if the leftmost key in @zn is the
735 * previous one. A negative error code is returned on failures.
737 static int resolve_collision(struct ubifs_info
*c
, const union ubifs_key
*key
,
738 struct ubifs_znode
**zn
, int *n
,
739 const struct fscrypt_name
*nm
)
743 err
= matches_name(c
, &(*zn
)->zbranch
[*n
], nm
);
744 if (unlikely(err
< 0))
746 if (err
== NAME_MATCHES
)
749 if (err
== NAME_GREATER
) {
752 err
= tnc_prev(c
, zn
, n
);
753 if (err
== -ENOENT
) {
754 ubifs_assert(c
, *n
== 0);
760 if (keys_cmp(c
, &(*zn
)->zbranch
[*n
].key
, key
)) {
762 * We have found the branch after which we would
763 * like to insert, but inserting in this znode
764 * may still be wrong. Consider the following 3
765 * znodes, in the case where we are resolving a
766 * collision with Key2.
769 * ----------------------
770 * level 1 | Key0 | Key1 |
771 * -----------------------
773 * znode za | | znode zb
774 * ------------ ------------
775 * level 0 | Key0 | | Key2 |
776 * ------------ ------------
778 * The lookup finds Key2 in znode zb. Lets say
779 * there is no match and the name is greater so
780 * we look left. When we find Key0, we end up
781 * here. If we return now, we will insert into
782 * znode za at slot n = 1. But that is invalid
783 * according to the parent's keys. Key2 must
784 * be inserted into znode zb.
786 * Note, this problem is not relevant for the
787 * case when we go right, because
788 * 'tnc_insert()' would correct the parent key.
790 if (*n
== (*zn
)->child_cnt
- 1) {
791 err
= tnc_next(c
, zn
, n
);
793 /* Should be impossible */
799 ubifs_assert(c
, *n
== 0);
804 err
= matches_name(c
, &(*zn
)->zbranch
[*n
], nm
);
807 if (err
== NAME_LESS
)
809 if (err
== NAME_MATCHES
)
811 ubifs_assert(c
, err
== NAME_GREATER
);
815 struct ubifs_znode
*znode
= *zn
;
819 err
= tnc_next(c
, &znode
, &nn
);
824 if (keys_cmp(c
, &znode
->zbranch
[nn
].key
, key
))
826 err
= matches_name(c
, &znode
->zbranch
[nn
], nm
);
829 if (err
== NAME_GREATER
)
833 if (err
== NAME_MATCHES
)
835 ubifs_assert(c
, err
== NAME_LESS
);
841 * fallible_matches_name - determine if a dent matches a given name.
842 * @c: UBIFS file-system description object
843 * @zbr: zbranch of dent
846 * This is a "fallible" version of 'matches_name()' function which does not
847 * panic if the direntry/xentry referred by @zbr does not exist on the media.
849 * This function checks if xentry/direntry referred by zbranch @zbr matches name
850 * @nm. Returns %NAME_MATCHES it does, %NAME_LESS if the name referred by @zbr
851 * is less than @nm, %NAME_GREATER if it is greater than @nm, and @NOT_ON_MEDIA
852 * if xentry/direntry referred by @zbr does not exist on the media. A negative
853 * error code is returned in case of failure.
855 static int fallible_matches_name(struct ubifs_info
*c
,
856 struct ubifs_zbranch
*zbr
,
857 const struct fscrypt_name
*nm
)
859 struct ubifs_dent_node
*dent
;
862 /* If possible, match against the dent in the leaf node cache */
864 dent
= kmalloc(zbr
->len
, GFP_NOFS
);
868 err
= fallible_read_node(c
, &zbr
->key
, zbr
, dent
);
872 /* The node was not present */
876 ubifs_assert(c
, err
== 1);
878 err
= lnc_add_directly(c
, zbr
, dent
);
884 nlen
= le16_to_cpu(dent
->nlen
);
885 err
= memcmp(dent
->name
, fname_name(nm
), min_t(int, nlen
, fname_len(nm
)));
887 if (nlen
== fname_len(nm
))
889 else if (nlen
< fname_len(nm
))
904 * fallible_resolve_collision - resolve a collision even if nodes are missing.
905 * @c: UBIFS file-system description object
907 * @zn: znode is returned here
908 * @n: branch number is passed and returned here
909 * @nm: name of directory entry
910 * @adding: indicates caller is adding a key to the TNC
912 * This is a "fallible" version of the 'resolve_collision()' function which
913 * does not panic if one of the nodes referred to by TNC does not exist on the
914 * media. This may happen when replaying the journal if a deleted node was
915 * Garbage-collected and the commit was not done. A branch that refers to a node
916 * that is not present is called a dangling branch. The following are the return
917 * codes for this function:
918 * o if @nm was found, %1 is returned and @zn and @n are set to the found
920 * o if we are @adding and @nm was not found, %0 is returned;
921 * o if we are not @adding and @nm was not found, but a dangling branch was
922 * found, then %1 is returned and @zn and @n are set to the dangling branch;
923 * o a negative error code is returned in case of failure.
925 static int fallible_resolve_collision(struct ubifs_info
*c
,
926 const union ubifs_key
*key
,
927 struct ubifs_znode
**zn
, int *n
,
928 const struct fscrypt_name
*nm
,
931 struct ubifs_znode
*o_znode
= NULL
, *znode
= *zn
;
932 int o_n
, err
, cmp
, unsure
= 0, nn
= *n
;
934 cmp
= fallible_matches_name(c
, &znode
->zbranch
[nn
], nm
);
935 if (unlikely(cmp
< 0))
937 if (cmp
== NAME_MATCHES
)
939 if (cmp
== NOT_ON_MEDIA
) {
943 * We are unlucky and hit a dangling branch straight away.
944 * Now we do not really know where to go to find the needed
945 * branch - to the left or to the right. Well, let's try left.
949 unsure
= 1; /* Remove a dangling branch wherever it is */
951 if (cmp
== NAME_GREATER
|| unsure
) {
954 err
= tnc_prev(c
, zn
, n
);
955 if (err
== -ENOENT
) {
956 ubifs_assert(c
, *n
== 0);
962 if (keys_cmp(c
, &(*zn
)->zbranch
[*n
].key
, key
)) {
963 /* See comments in 'resolve_collision()' */
964 if (*n
== (*zn
)->child_cnt
- 1) {
965 err
= tnc_next(c
, zn
, n
);
967 /* Should be impossible */
973 ubifs_assert(c
, *n
== 0);
978 err
= fallible_matches_name(c
, &(*zn
)->zbranch
[*n
], nm
);
981 if (err
== NAME_MATCHES
)
983 if (err
== NOT_ON_MEDIA
) {
990 if (err
== NAME_LESS
)
997 if (cmp
== NAME_LESS
|| unsure
) {
1002 err
= tnc_next(c
, &znode
, &nn
);
1007 if (keys_cmp(c
, &znode
->zbranch
[nn
].key
, key
))
1009 err
= fallible_matches_name(c
, &znode
->zbranch
[nn
], nm
);
1012 if (err
== NAME_GREATER
)
1016 if (err
== NAME_MATCHES
)
1018 if (err
== NOT_ON_MEDIA
) {
1025 /* Never match a dangling branch when adding */
1026 if (adding
|| !o_znode
)
1029 dbg_mntk(key
, "dangling match LEB %d:%d len %d key ",
1030 o_znode
->zbranch
[o_n
].lnum
, o_znode
->zbranch
[o_n
].offs
,
1031 o_znode
->zbranch
[o_n
].len
);
1038 * matches_position - determine if a zbranch matches a given position.
1039 * @zbr: zbranch of dent
1040 * @lnum: LEB number of dent to match
1041 * @offs: offset of dent to match
1043 * This function returns %1 if @lnum:@offs matches, and %0 otherwise.
1045 static int matches_position(struct ubifs_zbranch
*zbr
, int lnum
, int offs
)
1047 if (zbr
->lnum
== lnum
&& zbr
->offs
== offs
)
1054 * resolve_collision_directly - resolve a collision directly.
1055 * @c: UBIFS file-system description object
1056 * @key: key of directory entry
1057 * @zn: znode is passed and returned here
1058 * @n: zbranch number is passed and returned here
1059 * @lnum: LEB number of dent node to match
1060 * @offs: offset of dent node to match
1062 * This function is used for "hashed" keys to make sure the found directory or
1063 * extended attribute entry node is what was looked for. It is used when the
1064 * flash address of the right node is known (@lnum:@offs) which makes it much
1065 * easier to resolve collisions (no need to read entries and match full
1066 * names). This function returns %1 and sets @zn and @n if the collision is
1067 * resolved, %0 if @lnum:@offs is not found and @zn and @n are set to the
1068 * previous directory entry. Otherwise a negative error code is returned.
1070 static int resolve_collision_directly(struct ubifs_info
*c
,
1071 const union ubifs_key
*key
,
1072 struct ubifs_znode
**zn
, int *n
,
1075 struct ubifs_znode
*znode
;
1080 if (matches_position(&znode
->zbranch
[nn
], lnum
, offs
))
1085 err
= tnc_prev(c
, &znode
, &nn
);
1090 if (keys_cmp(c
, &znode
->zbranch
[nn
].key
, key
))
1092 if (matches_position(&znode
->zbranch
[nn
], lnum
, offs
)) {
1103 err
= tnc_next(c
, &znode
, &nn
);
1108 if (keys_cmp(c
, &znode
->zbranch
[nn
].key
, key
))
1112 if (matches_position(&znode
->zbranch
[nn
], lnum
, offs
))
1118 * dirty_cow_bottom_up - dirty a znode and its ancestors.
1119 * @c: UBIFS file-system description object
1120 * @znode: znode to dirty
1122 * If we do not have a unique key that resides in a znode, then we cannot
1123 * dirty that znode from the top down (i.e. by using lookup_level0_dirty)
1124 * This function records the path back to the last dirty ancestor, and then
1125 * dirties the znodes on that path.
1127 static struct ubifs_znode
*dirty_cow_bottom_up(struct ubifs_info
*c
,
1128 struct ubifs_znode
*znode
)
1130 struct ubifs_znode
*zp
;
1131 int *path
= c
->bottom_up_buf
, p
= 0;
1133 ubifs_assert(c
, c
->zroot
.znode
);
1134 ubifs_assert(c
, znode
);
1135 if (c
->zroot
.znode
->level
> BOTTOM_UP_HEIGHT
) {
1136 kfree(c
->bottom_up_buf
);
1137 c
->bottom_up_buf
= kmalloc_array(c
->zroot
.znode
->level
,
1140 if (!c
->bottom_up_buf
)
1141 return ERR_PTR(-ENOMEM
);
1142 path
= c
->bottom_up_buf
;
1144 if (c
->zroot
.znode
->level
) {
1145 /* Go up until parent is dirty */
1153 ubifs_assert(c
, p
< c
->zroot
.znode
->level
);
1155 if (!zp
->cnext
&& ubifs_zn_dirty(znode
))
1161 /* Come back down, dirtying as we go */
1163 struct ubifs_zbranch
*zbr
;
1167 ubifs_assert(c
, path
[p
- 1] >= 0);
1168 ubifs_assert(c
, path
[p
- 1] < zp
->child_cnt
);
1169 zbr
= &zp
->zbranch
[path
[--p
]];
1170 znode
= dirty_cow_znode(c
, zbr
);
1172 ubifs_assert(c
, znode
== c
->zroot
.znode
);
1173 znode
= dirty_cow_znode(c
, &c
->zroot
);
1175 if (IS_ERR(znode
) || !p
)
1177 ubifs_assert(c
, path
[p
- 1] >= 0);
1178 ubifs_assert(c
, path
[p
- 1] < znode
->child_cnt
);
1179 znode
= znode
->zbranch
[path
[p
- 1]].znode
;
1186 * ubifs_lookup_level0 - search for zero-level znode.
1187 * @c: UBIFS file-system description object
1188 * @key: key to lookup
1189 * @zn: znode is returned here
1190 * @n: znode branch slot number is returned here
1192 * This function looks up the TNC tree and search for zero-level znode which
1193 * refers key @key. The found zero-level znode is returned in @zn. There are 3
1195 * o exact match, i.e. the found zero-level znode contains key @key, then %1
1196 * is returned and slot number of the matched branch is stored in @n;
1197 * o not exact match, which means that zero-level znode does not contain
1198 * @key, then %0 is returned and slot number of the closest branch or %-1
1199 * is stored in @n; In this case calling tnc_next() is mandatory.
1200 * o @key is so small that it is even less than the lowest key of the
1201 * leftmost zero-level node, then %0 is returned and %0 is stored in @n.
1203 * Note, when the TNC tree is traversed, some znodes may be absent, then this
1204 * function reads corresponding indexing nodes and inserts them to TNC. In
1205 * case of failure, a negative error code is returned.
1207 int ubifs_lookup_level0(struct ubifs_info
*c
, const union ubifs_key
*key
,
1208 struct ubifs_znode
**zn
, int *n
)
1211 struct ubifs_znode
*znode
;
1212 time64_t time
= ktime_get_seconds();
1214 dbg_tnck(key
, "search key ");
1215 ubifs_assert(c
, key_type(c
, key
) < UBIFS_INVALID_KEY
);
1217 znode
= c
->zroot
.znode
;
1218 if (unlikely(!znode
)) {
1219 znode
= ubifs_load_znode(c
, &c
->zroot
, NULL
, 0);
1221 return PTR_ERR(znode
);
1227 struct ubifs_zbranch
*zbr
;
1229 exact
= ubifs_search_zbranch(c
, znode
, key
, n
);
1231 if (znode
->level
== 0)
1236 zbr
= &znode
->zbranch
[*n
];
1244 /* znode is not in TNC cache, load it from the media */
1245 znode
= ubifs_load_znode(c
, zbr
, znode
, *n
);
1247 return PTR_ERR(znode
);
1251 if (exact
|| !is_hash_key(c
, key
) || *n
!= -1) {
1252 dbg_tnc("found %d, lvl %d, n %d", exact
, znode
->level
, *n
);
1257 * Here is a tricky place. We have not found the key and this is a
1258 * "hashed" key, which may collide. The rest of the code deals with
1259 * situations like this:
1263 * | 3 | 5 | | 6 | 7 | (x)
1265 * Or more a complex example:
1269 * | 1 | 3 | | 5 | 8 |
1271 * | 5 | 5 | | 6 | 7 | (x)
1273 * In the examples, if we are looking for key "5", we may reach nodes
1274 * marked with "(x)". In this case what we have do is to look at the
1275 * left and see if there is "5" key there. If there is, we have to
1278 * Note, this whole situation is possible because we allow to have
1279 * elements which are equivalent to the next key in the parent in the
1280 * children of current znode. For example, this happens if we split a
1281 * znode like this: | 3 | 5 | 5 | 6 | 7 |, which results in something
1285 * | 3 | 5 | | 5 | 6 | 7 |
1287 * And this becomes what is at the first "picture" after key "5" marked
1288 * with "^" is removed. What could be done is we could prohibit
1289 * splitting in the middle of the colliding sequence. Also, when
1290 * removing the leftmost key, we would have to correct the key of the
1291 * parent node, which would introduce additional complications. Namely,
1292 * if we changed the leftmost key of the parent znode, the garbage
1293 * collector would be unable to find it (GC is doing this when GC'ing
1294 * indexing LEBs). Although we already have an additional RB-tree where
1295 * we save such changed znodes (see 'ins_clr_old_idx_znode()') until
1296 * after the commit. But anyway, this does not look easy to implement
1297 * so we did not try this.
1299 err
= tnc_prev(c
, &znode
, n
);
1300 if (err
== -ENOENT
) {
1301 dbg_tnc("found 0, lvl %d, n -1", znode
->level
);
1305 if (unlikely(err
< 0))
1307 if (keys_cmp(c
, key
, &znode
->zbranch
[*n
].key
)) {
1308 dbg_tnc("found 0, lvl %d, n -1", znode
->level
);
1313 dbg_tnc("found 1, lvl %d, n %d", znode
->level
, *n
);
1319 * lookup_level0_dirty - search for zero-level znode dirtying.
1320 * @c: UBIFS file-system description object
1321 * @key: key to lookup
1322 * @zn: znode is returned here
1323 * @n: znode branch slot number is returned here
1325 * This function looks up the TNC tree and search for zero-level znode which
1326 * refers key @key. The found zero-level znode is returned in @zn. There are 3
1328 * o exact match, i.e. the found zero-level znode contains key @key, then %1
1329 * is returned and slot number of the matched branch is stored in @n;
1330 * o not exact match, which means that zero-level znode does not contain @key
1331 * then %0 is returned and slot number of the closed branch is stored in
1333 * o @key is so small that it is even less than the lowest key of the
1334 * leftmost zero-level node, then %0 is returned and %-1 is stored in @n.
1336 * Additionally all znodes in the path from the root to the located zero-level
1337 * znode are marked as dirty.
1339 * Note, when the TNC tree is traversed, some znodes may be absent, then this
1340 * function reads corresponding indexing nodes and inserts them to TNC. In
1341 * case of failure, a negative error code is returned.
1343 static int lookup_level0_dirty(struct ubifs_info
*c
, const union ubifs_key
*key
,
1344 struct ubifs_znode
**zn
, int *n
)
1347 struct ubifs_znode
*znode
;
1348 time64_t time
= ktime_get_seconds();
1350 dbg_tnck(key
, "search and dirty key ");
1352 znode
= c
->zroot
.znode
;
1353 if (unlikely(!znode
)) {
1354 znode
= ubifs_load_znode(c
, &c
->zroot
, NULL
, 0);
1356 return PTR_ERR(znode
);
1359 znode
= dirty_cow_znode(c
, &c
->zroot
);
1361 return PTR_ERR(znode
);
1366 struct ubifs_zbranch
*zbr
;
1368 exact
= ubifs_search_zbranch(c
, znode
, key
, n
);
1370 if (znode
->level
== 0)
1375 zbr
= &znode
->zbranch
[*n
];
1379 znode
= dirty_cow_znode(c
, zbr
);
1381 return PTR_ERR(znode
);
1385 /* znode is not in TNC cache, load it from the media */
1386 znode
= ubifs_load_znode(c
, zbr
, znode
, *n
);
1388 return PTR_ERR(znode
);
1389 znode
= dirty_cow_znode(c
, zbr
);
1391 return PTR_ERR(znode
);
1395 if (exact
|| !is_hash_key(c
, key
) || *n
!= -1) {
1396 dbg_tnc("found %d, lvl %d, n %d", exact
, znode
->level
, *n
);
1401 * See huge comment at 'lookup_level0_dirty()' what is the rest of the
1404 err
= tnc_prev(c
, &znode
, n
);
1405 if (err
== -ENOENT
) {
1407 dbg_tnc("found 0, lvl %d, n -1", znode
->level
);
1410 if (unlikely(err
< 0))
1412 if (keys_cmp(c
, key
, &znode
->zbranch
[*n
].key
)) {
1414 dbg_tnc("found 0, lvl %d, n -1", znode
->level
);
1418 if (znode
->cnext
|| !ubifs_zn_dirty(znode
)) {
1419 znode
= dirty_cow_bottom_up(c
, znode
);
1421 return PTR_ERR(znode
);
1424 dbg_tnc("found 1, lvl %d, n %d", znode
->level
, *n
);
1430 * maybe_leb_gced - determine if a LEB may have been garbage collected.
1431 * @c: UBIFS file-system description object
1433 * @gc_seq1: garbage collection sequence number
1435 * This function determines if @lnum may have been garbage collected since
1436 * sequence number @gc_seq1. If it may have been then %1 is returned, otherwise
1439 static int maybe_leb_gced(struct ubifs_info
*c
, int lnum
, int gc_seq1
)
1441 int gc_seq2
, gced_lnum
;
1443 gced_lnum
= c
->gced_lnum
;
1445 gc_seq2
= c
->gc_seq
;
1446 /* Same seq means no GC */
1447 if (gc_seq1
== gc_seq2
)
1449 /* Different by more than 1 means we don't know */
1450 if (gc_seq1
+ 1 != gc_seq2
)
1453 * We have seen the sequence number has increased by 1. Now we need to
1454 * be sure we read the right LEB number, so read it again.
1457 if (gced_lnum
!= c
->gced_lnum
)
1459 /* Finally we can check lnum */
1460 if (gced_lnum
== lnum
)
1466 * ubifs_tnc_locate - look up a file-system node and return it and its location.
1467 * @c: UBIFS file-system description object
1468 * @key: node key to lookup
1469 * @node: the node is returned here
1470 * @lnum: LEB number is returned here
1471 * @offs: offset is returned here
1473 * This function looks up and reads node with key @key. The caller has to make
1474 * sure the @node buffer is large enough to fit the node. Returns zero in case
1475 * of success, %-ENOENT if the node was not found, and a negative error code in
1476 * case of failure. The node location can be returned in @lnum and @offs.
1478 int ubifs_tnc_locate(struct ubifs_info
*c
, const union ubifs_key
*key
,
1479 void *node
, int *lnum
, int *offs
)
1481 int found
, n
, err
, safely
= 0, gc_seq1
;
1482 struct ubifs_znode
*znode
;
1483 struct ubifs_zbranch zbr
, *zt
;
1486 mutex_lock(&c
->tnc_mutex
);
1487 found
= ubifs_lookup_level0(c
, key
, &znode
, &n
);
1491 } else if (found
< 0) {
1495 zt
= &znode
->zbranch
[n
];
1500 if (is_hash_key(c
, key
)) {
1502 * In this case the leaf node cache gets used, so we pass the
1503 * address of the zbranch and keep the mutex locked
1505 err
= tnc_read_hashed_node(c
, zt
, node
);
1509 err
= ubifs_tnc_read_node(c
, zt
, node
);
1512 /* Drop the TNC mutex prematurely and race with garbage collection */
1513 zbr
= znode
->zbranch
[n
];
1514 gc_seq1
= c
->gc_seq
;
1515 mutex_unlock(&c
->tnc_mutex
);
1517 if (ubifs_get_wbuf(c
, zbr
.lnum
)) {
1518 /* We do not GC journal heads */
1519 err
= ubifs_tnc_read_node(c
, &zbr
, node
);
1523 err
= fallible_read_node(c
, key
, &zbr
, node
);
1524 if (err
<= 0 || maybe_leb_gced(c
, zbr
.lnum
, gc_seq1
)) {
1526 * The node may have been GC'ed out from under us so try again
1527 * while keeping the TNC mutex locked.
1535 mutex_unlock(&c
->tnc_mutex
);
1540 * ubifs_tnc_get_bu_keys - lookup keys for bulk-read.
1541 * @c: UBIFS file-system description object
1542 * @bu: bulk-read parameters and results
1544 * Lookup consecutive data node keys for the same inode that reside
1545 * consecutively in the same LEB. This function returns zero in case of success
1546 * and a negative error code in case of failure.
1548 * Note, if the bulk-read buffer length (@bu->buf_len) is known, this function
1549 * makes sure bulk-read nodes fit the buffer. Otherwise, this function prepares
1550 * maximum possible amount of nodes for bulk-read.
1552 int ubifs_tnc_get_bu_keys(struct ubifs_info
*c
, struct bu_info
*bu
)
1554 int n
, err
= 0, lnum
= -1, offs
;
1556 unsigned int block
= key_block(c
, &bu
->key
);
1557 struct ubifs_znode
*znode
;
1563 mutex_lock(&c
->tnc_mutex
);
1564 /* Find first key */
1565 err
= ubifs_lookup_level0(c
, &bu
->key
, &znode
, &n
);
1570 len
= znode
->zbranch
[n
].len
;
1571 /* The buffer must be big enough for at least 1 node */
1572 if (len
> bu
->buf_len
) {
1577 bu
->zbranch
[bu
->cnt
++] = znode
->zbranch
[n
];
1579 lnum
= znode
->zbranch
[n
].lnum
;
1580 offs
= ALIGN(znode
->zbranch
[n
].offs
+ len
, 8);
1583 struct ubifs_zbranch
*zbr
;
1584 union ubifs_key
*key
;
1585 unsigned int next_block
;
1588 err
= tnc_next(c
, &znode
, &n
);
1591 zbr
= &znode
->zbranch
[n
];
1593 /* See if there is another data key for this file */
1594 if (key_inum(c
, key
) != key_inum(c
, &bu
->key
) ||
1595 key_type(c
, key
) != UBIFS_DATA_KEY
) {
1600 /* First key found */
1602 offs
= ALIGN(zbr
->offs
+ zbr
->len
, 8);
1604 if (len
> bu
->buf_len
) {
1610 * The data nodes must be in consecutive positions in
1613 if (zbr
->lnum
!= lnum
|| zbr
->offs
!= offs
)
1615 offs
+= ALIGN(zbr
->len
, 8);
1616 len
= ALIGN(len
, 8) + zbr
->len
;
1617 /* Must not exceed buffer length */
1618 if (len
> bu
->buf_len
)
1621 /* Allow for holes */
1622 next_block
= key_block(c
, key
);
1623 bu
->blk_cnt
+= (next_block
- block
- 1);
1624 if (bu
->blk_cnt
>= UBIFS_MAX_BULK_READ
)
1628 bu
->zbranch
[bu
->cnt
++] = *zbr
;
1630 /* See if we have room for more */
1631 if (bu
->cnt
>= UBIFS_MAX_BULK_READ
)
1633 if (bu
->blk_cnt
>= UBIFS_MAX_BULK_READ
)
1637 if (err
== -ENOENT
) {
1641 bu
->gc_seq
= c
->gc_seq
;
1642 mutex_unlock(&c
->tnc_mutex
);
1646 * An enormous hole could cause bulk-read to encompass too many
1647 * page cache pages, so limit the number here.
1649 if (bu
->blk_cnt
> UBIFS_MAX_BULK_READ
)
1650 bu
->blk_cnt
= UBIFS_MAX_BULK_READ
;
1652 * Ensure that bulk-read covers a whole number of page cache
1655 if (UBIFS_BLOCKS_PER_PAGE
== 1 ||
1656 !(bu
->blk_cnt
& (UBIFS_BLOCKS_PER_PAGE
- 1)))
1659 /* At the end of file we can round up */
1660 bu
->blk_cnt
+= UBIFS_BLOCKS_PER_PAGE
- 1;
1663 /* Exclude data nodes that do not make up a whole page cache page */
1664 block
= key_block(c
, &bu
->key
) + bu
->blk_cnt
;
1665 block
&= ~(UBIFS_BLOCKS_PER_PAGE
- 1);
1667 if (key_block(c
, &bu
->zbranch
[bu
->cnt
- 1].key
) < block
)
1675 * read_wbuf - bulk-read from a LEB with a wbuf.
1676 * @wbuf: wbuf that may overlap the read
1677 * @buf: buffer into which to read
1679 * @lnum: LEB number from which to read
1680 * @offs: offset from which to read
1682 * This functions returns %0 on success or a negative error code on failure.
1684 static int read_wbuf(struct ubifs_wbuf
*wbuf
, void *buf
, int len
, int lnum
,
1687 const struct ubifs_info
*c
= wbuf
->c
;
1690 dbg_io("LEB %d:%d, length %d", lnum
, offs
, len
);
1691 ubifs_assert(c
, wbuf
&& lnum
>= 0 && lnum
< c
->leb_cnt
&& offs
>= 0);
1692 ubifs_assert(c
, !(offs
& 7) && offs
< c
->leb_size
);
1693 ubifs_assert(c
, offs
+ len
<= c
->leb_size
);
1695 spin_lock(&wbuf
->lock
);
1696 overlap
= (lnum
== wbuf
->lnum
&& offs
+ len
> wbuf
->offs
);
1698 /* We may safely unlock the write-buffer and read the data */
1699 spin_unlock(&wbuf
->lock
);
1700 return ubifs_leb_read(c
, lnum
, buf
, offs
, len
, 0);
1703 /* Don't read under wbuf */
1704 rlen
= wbuf
->offs
- offs
;
1708 /* Copy the rest from the write-buffer */
1709 memcpy(buf
+ rlen
, wbuf
->buf
+ offs
+ rlen
- wbuf
->offs
, len
- rlen
);
1710 spin_unlock(&wbuf
->lock
);
1713 /* Read everything that goes before write-buffer */
1714 return ubifs_leb_read(c
, lnum
, buf
, offs
, rlen
, 0);
1720 * validate_data_node - validate data nodes for bulk-read.
1721 * @c: UBIFS file-system description object
1722 * @buf: buffer containing data node to validate
1723 * @zbr: zbranch of data node to validate
1725 * This functions returns %0 on success or a negative error code on failure.
1727 static int validate_data_node(struct ubifs_info
*c
, void *buf
,
1728 struct ubifs_zbranch
*zbr
)
1730 union ubifs_key key1
;
1731 struct ubifs_ch
*ch
= buf
;
1734 if (ch
->node_type
!= UBIFS_DATA_NODE
) {
1735 ubifs_err(c
, "bad node type (%d but expected %d)",
1736 ch
->node_type
, UBIFS_DATA_NODE
);
1740 err
= ubifs_check_node(c
, buf
, zbr
->len
, zbr
->lnum
, zbr
->offs
, 0, 0);
1742 ubifs_err(c
, "expected node type %d", UBIFS_DATA_NODE
);
1746 err
= ubifs_node_check_hash(c
, buf
, zbr
->hash
);
1748 ubifs_bad_hash(c
, buf
, zbr
->hash
, zbr
->lnum
, zbr
->offs
);
1752 len
= le32_to_cpu(ch
->len
);
1753 if (len
!= zbr
->len
) {
1754 ubifs_err(c
, "bad node length %d, expected %d", len
, zbr
->len
);
1758 /* Make sure the key of the read node is correct */
1759 key_read(c
, buf
+ UBIFS_KEY_OFFSET
, &key1
);
1760 if (!keys_eq(c
, &zbr
->key
, &key1
)) {
1761 ubifs_err(c
, "bad key in node at LEB %d:%d",
1762 zbr
->lnum
, zbr
->offs
);
1763 dbg_tnck(&zbr
->key
, "looked for key ");
1764 dbg_tnck(&key1
, "found node's key ");
1773 ubifs_err(c
, "bad node at LEB %d:%d", zbr
->lnum
, zbr
->offs
);
1774 ubifs_dump_node(c
, buf
, zbr
->len
);
1780 * ubifs_tnc_bulk_read - read a number of data nodes in one go.
1781 * @c: UBIFS file-system description object
1782 * @bu: bulk-read parameters and results
1784 * This functions reads and validates the data nodes that were identified by the
1785 * 'ubifs_tnc_get_bu_keys()' function. This functions returns %0 on success,
1786 * -EAGAIN to indicate a race with GC, or another negative error code on
1789 int ubifs_tnc_bulk_read(struct ubifs_info
*c
, struct bu_info
*bu
)
1791 int lnum
= bu
->zbranch
[0].lnum
, offs
= bu
->zbranch
[0].offs
, len
, err
, i
;
1792 struct ubifs_wbuf
*wbuf
;
1795 len
= bu
->zbranch
[bu
->cnt
- 1].offs
;
1796 len
+= bu
->zbranch
[bu
->cnt
- 1].len
- offs
;
1797 if (len
> bu
->buf_len
) {
1798 ubifs_err(c
, "buffer too small %d vs %d", bu
->buf_len
, len
);
1803 wbuf
= ubifs_get_wbuf(c
, lnum
);
1805 err
= read_wbuf(wbuf
, bu
->buf
, len
, lnum
, offs
);
1807 err
= ubifs_leb_read(c
, lnum
, bu
->buf
, offs
, len
, 0);
1809 /* Check for a race with GC */
1810 if (maybe_leb_gced(c
, lnum
, bu
->gc_seq
))
1813 if (err
&& err
!= -EBADMSG
) {
1814 ubifs_err(c
, "failed to read from LEB %d:%d, error %d",
1817 dbg_tnck(&bu
->key
, "key ");
1821 /* Validate the nodes read */
1823 for (i
= 0; i
< bu
->cnt
; i
++) {
1824 err
= validate_data_node(c
, buf
, &bu
->zbranch
[i
]);
1827 buf
= buf
+ ALIGN(bu
->zbranch
[i
].len
, 8);
1834 * do_lookup_nm- look up a "hashed" node.
1835 * @c: UBIFS file-system description object
1836 * @key: node key to lookup
1837 * @node: the node is returned here
1840 * This function looks up and reads a node which contains name hash in the key.
1841 * Since the hash may have collisions, there may be many nodes with the same
1842 * key, so we have to sequentially look to all of them until the needed one is
1843 * found. This function returns zero in case of success, %-ENOENT if the node
1844 * was not found, and a negative error code in case of failure.
1846 static int do_lookup_nm(struct ubifs_info
*c
, const union ubifs_key
*key
,
1847 void *node
, const struct fscrypt_name
*nm
)
1850 struct ubifs_znode
*znode
;
1852 dbg_tnck(key
, "key ");
1853 mutex_lock(&c
->tnc_mutex
);
1854 found
= ubifs_lookup_level0(c
, key
, &znode
, &n
);
1858 } else if (found
< 0) {
1863 ubifs_assert(c
, n
>= 0);
1865 err
= resolve_collision(c
, key
, &znode
, &n
, nm
);
1866 dbg_tnc("rc returned %d, znode %p, n %d", err
, znode
, n
);
1867 if (unlikely(err
< 0))
1874 err
= tnc_read_hashed_node(c
, &znode
->zbranch
[n
], node
);
1877 mutex_unlock(&c
->tnc_mutex
);
1882 * ubifs_tnc_lookup_nm - look up a "hashed" node.
1883 * @c: UBIFS file-system description object
1884 * @key: node key to lookup
1885 * @node: the node is returned here
1888 * This function looks up and reads a node which contains name hash in the key.
1889 * Since the hash may have collisions, there may be many nodes with the same
1890 * key, so we have to sequentially look to all of them until the needed one is
1891 * found. This function returns zero in case of success, %-ENOENT if the node
1892 * was not found, and a negative error code in case of failure.
1894 int ubifs_tnc_lookup_nm(struct ubifs_info
*c
, const union ubifs_key
*key
,
1895 void *node
, const struct fscrypt_name
*nm
)
1898 const struct ubifs_dent_node
*dent
= node
;
1901 * We assume that in most of the cases there are no name collisions and
1902 * 'ubifs_tnc_lookup()' returns us the right direntry.
1904 err
= ubifs_tnc_lookup(c
, key
, node
);
1908 len
= le16_to_cpu(dent
->nlen
);
1909 if (fname_len(nm
) == len
&& !memcmp(dent
->name
, fname_name(nm
), len
))
1913 * Unluckily, there are hash collisions and we have to iterate over
1914 * them look at each direntry with colliding name hash sequentially.
1917 return do_lookup_nm(c
, key
, node
, nm
);
1920 static int search_dh_cookie(struct ubifs_info
*c
, const union ubifs_key
*key
,
1921 struct ubifs_dent_node
*dent
, uint32_t cookie
,
1922 struct ubifs_znode
**zn
, int *n
, int exact
)
1925 struct ubifs_znode
*znode
= *zn
;
1926 struct ubifs_zbranch
*zbr
;
1927 union ubifs_key
*dkey
;
1930 err
= tnc_next(c
, &znode
, n
);
1936 zbr
= &znode
->zbranch
[*n
];
1939 if (key_inum(c
, dkey
) != key_inum(c
, key
) ||
1940 key_type(c
, dkey
) != key_type(c
, key
)) {
1944 err
= tnc_read_hashed_node(c
, zbr
, dent
);
1948 if (key_hash(c
, key
) == key_hash(c
, dkey
) &&
1949 le32_to_cpu(dent
->cookie
) == cookie
) {
1954 err
= tnc_next(c
, &znode
, n
);
1960 static int do_lookup_dh(struct ubifs_info
*c
, const union ubifs_key
*key
,
1961 struct ubifs_dent_node
*dent
, uint32_t cookie
)
1964 struct ubifs_znode
*znode
;
1965 union ubifs_key start_key
;
1967 ubifs_assert(c
, is_hash_key(c
, key
));
1969 lowest_dent_key(c
, &start_key
, key_inum(c
, key
));
1971 mutex_lock(&c
->tnc_mutex
);
1972 err
= ubifs_lookup_level0(c
, &start_key
, &znode
, &n
);
1973 if (unlikely(err
< 0))
1976 err
= search_dh_cookie(c
, key
, dent
, cookie
, &znode
, &n
, err
);
1979 mutex_unlock(&c
->tnc_mutex
);
1984 * ubifs_tnc_lookup_dh - look up a "double hashed" node.
1985 * @c: UBIFS file-system description object
1986 * @key: node key to lookup
1987 * @node: the node is returned here
1988 * @cookie: node cookie for collision resolution
1990 * This function looks up and reads a node which contains name hash in the key.
1991 * Since the hash may have collisions, there may be many nodes with the same
1992 * key, so we have to sequentially look to all of them until the needed one
1993 * with the same cookie value is found.
1994 * This function returns zero in case of success, %-ENOENT if the node
1995 * was not found, and a negative error code in case of failure.
1997 int ubifs_tnc_lookup_dh(struct ubifs_info
*c
, const union ubifs_key
*key
,
1998 void *node
, uint32_t cookie
)
2001 const struct ubifs_dent_node
*dent
= node
;
2003 if (!c
->double_hash
)
2007 * We assume that in most of the cases there are no name collisions and
2008 * 'ubifs_tnc_lookup()' returns us the right direntry.
2010 err
= ubifs_tnc_lookup(c
, key
, node
);
2014 if (le32_to_cpu(dent
->cookie
) == cookie
)
2018 * Unluckily, there are hash collisions and we have to iterate over
2019 * them look at each direntry with colliding name hash sequentially.
2021 return do_lookup_dh(c
, key
, node
, cookie
);
2025 * correct_parent_keys - correct parent znodes' keys.
2026 * @c: UBIFS file-system description object
2027 * @znode: znode to correct parent znodes for
2029 * This is a helper function for 'tnc_insert()'. When the key of the leftmost
2030 * zbranch changes, keys of parent znodes have to be corrected. This helper
2031 * function is called in such situations and corrects the keys if needed.
2033 static void correct_parent_keys(const struct ubifs_info
*c
,
2034 struct ubifs_znode
*znode
)
2036 union ubifs_key
*key
, *key1
;
2038 ubifs_assert(c
, znode
->parent
);
2039 ubifs_assert(c
, znode
->iip
== 0);
2041 key
= &znode
->zbranch
[0].key
;
2042 key1
= &znode
->parent
->zbranch
[0].key
;
2044 while (keys_cmp(c
, key
, key1
) < 0) {
2045 key_copy(c
, key
, key1
);
2046 znode
= znode
->parent
;
2048 if (!znode
->parent
|| znode
->iip
)
2050 key1
= &znode
->parent
->zbranch
[0].key
;
2055 * insert_zbranch - insert a zbranch into a znode.
2056 * @c: UBIFS file-system description object
2057 * @znode: znode into which to insert
2058 * @zbr: zbranch to insert
2059 * @n: slot number to insert to
2061 * This is a helper function for 'tnc_insert()'. UBIFS does not allow "gaps" in
2062 * znode's array of zbranches and keeps zbranches consolidated, so when a new
2063 * zbranch has to be inserted to the @znode->zbranches[]' array at the @n-th
2064 * slot, zbranches starting from @n have to be moved right.
2066 static void insert_zbranch(struct ubifs_info
*c
, struct ubifs_znode
*znode
,
2067 const struct ubifs_zbranch
*zbr
, int n
)
2071 ubifs_assert(c
, ubifs_zn_dirty(znode
));
2074 for (i
= znode
->child_cnt
; i
> n
; i
--) {
2075 znode
->zbranch
[i
] = znode
->zbranch
[i
- 1];
2076 if (znode
->zbranch
[i
].znode
)
2077 znode
->zbranch
[i
].znode
->iip
= i
;
2080 zbr
->znode
->iip
= n
;
2082 for (i
= znode
->child_cnt
; i
> n
; i
--)
2083 znode
->zbranch
[i
] = znode
->zbranch
[i
- 1];
2085 znode
->zbranch
[n
] = *zbr
;
2086 znode
->child_cnt
+= 1;
2089 * After inserting at slot zero, the lower bound of the key range of
2090 * this znode may have changed. If this znode is subsequently split
2091 * then the upper bound of the key range may change, and furthermore
2092 * it could change to be lower than the original lower bound. If that
2093 * happens, then it will no longer be possible to find this znode in the
2094 * TNC using the key from the index node on flash. That is bad because
2095 * if it is not found, we will assume it is obsolete and may overwrite
2096 * it. Then if there is an unclean unmount, we will start using the
2097 * old index which will be broken.
2099 * So we first mark znodes that have insertions at slot zero, and then
2100 * if they are split we add their lnum/offs to the old_idx tree.
2107 * tnc_insert - insert a node into TNC.
2108 * @c: UBIFS file-system description object
2109 * @znode: znode to insert into
2110 * @zbr: branch to insert
2111 * @n: slot number to insert new zbranch to
2113 * This function inserts a new node described by @zbr into znode @znode. If
2114 * znode does not have a free slot for new zbranch, it is split. Parent znodes
2115 * are splat as well if needed. Returns zero in case of success or a negative
2116 * error code in case of failure.
2118 static int tnc_insert(struct ubifs_info
*c
, struct ubifs_znode
*znode
,
2119 struct ubifs_zbranch
*zbr
, int n
)
2121 struct ubifs_znode
*zn
, *zi
, *zp
;
2122 int i
, keep
, move
, appending
= 0;
2123 union ubifs_key
*key
= &zbr
->key
, *key1
;
2125 ubifs_assert(c
, n
>= 0 && n
<= c
->fanout
);
2127 /* Implement naive insert for now */
2130 if (znode
->child_cnt
< c
->fanout
) {
2131 ubifs_assert(c
, n
!= c
->fanout
);
2132 dbg_tnck(key
, "inserted at %d level %d, key ", n
, znode
->level
);
2134 insert_zbranch(c
, znode
, zbr
, n
);
2136 /* Ensure parent's key is correct */
2137 if (n
== 0 && zp
&& znode
->iip
== 0)
2138 correct_parent_keys(c
, znode
);
2144 * Unfortunately, @znode does not have more empty slots and we have to
2147 dbg_tnck(key
, "splitting level %d, key ", znode
->level
);
2151 * We can no longer be sure of finding this znode by key, so we
2152 * record it in the old_idx tree.
2154 ins_clr_old_idx_znode(c
, znode
);
2156 zn
= kzalloc(c
->max_znode_sz
, GFP_NOFS
);
2160 zn
->level
= znode
->level
;
2162 /* Decide where to split */
2163 if (znode
->level
== 0 && key_type(c
, key
) == UBIFS_DATA_KEY
) {
2164 /* Try not to split consecutive data keys */
2165 if (n
== c
->fanout
) {
2166 key1
= &znode
->zbranch
[n
- 1].key
;
2167 if (key_inum(c
, key1
) == key_inum(c
, key
) &&
2168 key_type(c
, key1
) == UBIFS_DATA_KEY
)
2172 } else if (appending
&& n
!= c
->fanout
) {
2173 /* Try not to split consecutive data keys */
2176 if (n
>= (c
->fanout
+ 1) / 2) {
2177 key1
= &znode
->zbranch
[0].key
;
2178 if (key_inum(c
, key1
) == key_inum(c
, key
) &&
2179 key_type(c
, key1
) == UBIFS_DATA_KEY
) {
2180 key1
= &znode
->zbranch
[n
].key
;
2181 if (key_inum(c
, key1
) != key_inum(c
, key
) ||
2182 key_type(c
, key1
) != UBIFS_DATA_KEY
) {
2184 move
= c
->fanout
- keep
;
2196 keep
= (c
->fanout
+ 1) / 2;
2197 move
= c
->fanout
- keep
;
2201 * Although we don't at present, we could look at the neighbors and see
2202 * if we can move some zbranches there.
2206 /* Insert into existing znode */
2211 /* Insert into new znode */
2216 zbr
->znode
->parent
= zn
;
2221 __set_bit(DIRTY_ZNODE
, &zn
->flags
);
2222 atomic_long_inc(&c
->dirty_zn_cnt
);
2224 zn
->child_cnt
= move
;
2225 znode
->child_cnt
= keep
;
2227 dbg_tnc("moving %d, keeping %d", move
, keep
);
2230 for (i
= 0; i
< move
; i
++) {
2231 zn
->zbranch
[i
] = znode
->zbranch
[keep
+ i
];
2234 if (zn
->zbranch
[i
].znode
) {
2235 zn
->zbranch
[i
].znode
->parent
= zn
;
2236 zn
->zbranch
[i
].znode
->iip
= i
;
2240 /* Insert new key and branch */
2241 dbg_tnck(key
, "inserting at %d level %d, key ", n
, zn
->level
);
2243 insert_zbranch(c
, zi
, zbr
, n
);
2245 /* Insert new znode (produced by spitting) into the parent */
2247 if (n
== 0 && zi
== znode
&& znode
->iip
== 0)
2248 correct_parent_keys(c
, znode
);
2250 /* Locate insertion point */
2253 /* Tail recursion */
2254 zbr
->key
= zn
->zbranch
[0].key
;
2264 /* We have to split root znode */
2265 dbg_tnc("creating new zroot at level %d", znode
->level
+ 1);
2267 zi
= kzalloc(c
->max_znode_sz
, GFP_NOFS
);
2272 zi
->level
= znode
->level
+ 1;
2274 __set_bit(DIRTY_ZNODE
, &zi
->flags
);
2275 atomic_long_inc(&c
->dirty_zn_cnt
);
2277 zi
->zbranch
[0].key
= znode
->zbranch
[0].key
;
2278 zi
->zbranch
[0].znode
= znode
;
2279 zi
->zbranch
[0].lnum
= c
->zroot
.lnum
;
2280 zi
->zbranch
[0].offs
= c
->zroot
.offs
;
2281 zi
->zbranch
[0].len
= c
->zroot
.len
;
2282 zi
->zbranch
[1].key
= zn
->zbranch
[0].key
;
2283 zi
->zbranch
[1].znode
= zn
;
2288 c
->zroot
.znode
= zi
;
2299 * ubifs_tnc_add - add a node to TNC.
2300 * @c: UBIFS file-system description object
2302 * @lnum: LEB number of node
2303 * @offs: node offset
2305 * @hash: The hash over the node
2307 * This function adds a node with key @key to TNC. The node may be new or it may
2308 * obsolete some existing one. Returns %0 on success or negative error code on
2311 int ubifs_tnc_add(struct ubifs_info
*c
, const union ubifs_key
*key
, int lnum
,
2312 int offs
, int len
, const u8
*hash
)
2314 int found
, n
, err
= 0;
2315 struct ubifs_znode
*znode
;
2317 mutex_lock(&c
->tnc_mutex
);
2318 dbg_tnck(key
, "%d:%d, len %d, key ", lnum
, offs
, len
);
2319 found
= lookup_level0_dirty(c
, key
, &znode
, &n
);
2321 struct ubifs_zbranch zbr
;
2327 ubifs_copy_hash(c
, hash
, zbr
.hash
);
2328 key_copy(c
, key
, &zbr
.key
);
2329 err
= tnc_insert(c
, znode
, &zbr
, n
+ 1);
2330 } else if (found
== 1) {
2331 struct ubifs_zbranch
*zbr
= &znode
->zbranch
[n
];
2334 err
= ubifs_add_dirt(c
, zbr
->lnum
, zbr
->len
);
2338 ubifs_copy_hash(c
, hash
, zbr
->hash
);
2342 err
= dbg_check_tnc(c
, 0);
2343 mutex_unlock(&c
->tnc_mutex
);
2349 * ubifs_tnc_replace - replace a node in the TNC only if the old node is found.
2350 * @c: UBIFS file-system description object
2352 * @old_lnum: LEB number of old node
2353 * @old_offs: old node offset
2354 * @lnum: LEB number of node
2355 * @offs: node offset
2358 * This function replaces a node with key @key in the TNC only if the old node
2359 * is found. This function is called by garbage collection when node are moved.
2360 * Returns %0 on success or negative error code on failure.
2362 int ubifs_tnc_replace(struct ubifs_info
*c
, const union ubifs_key
*key
,
2363 int old_lnum
, int old_offs
, int lnum
, int offs
, int len
)
2365 int found
, n
, err
= 0;
2366 struct ubifs_znode
*znode
;
2368 mutex_lock(&c
->tnc_mutex
);
2369 dbg_tnck(key
, "old LEB %d:%d, new LEB %d:%d, len %d, key ", old_lnum
,
2370 old_offs
, lnum
, offs
, len
);
2371 found
= lookup_level0_dirty(c
, key
, &znode
, &n
);
2378 struct ubifs_zbranch
*zbr
= &znode
->zbranch
[n
];
2381 if (zbr
->lnum
== old_lnum
&& zbr
->offs
== old_offs
) {
2383 err
= ubifs_add_dirt(c
, zbr
->lnum
, zbr
->len
);
2390 } else if (is_hash_key(c
, key
)) {
2391 found
= resolve_collision_directly(c
, key
, &znode
, &n
,
2392 old_lnum
, old_offs
);
2393 dbg_tnc("rc returned %d, znode %p, n %d, LEB %d:%d",
2394 found
, znode
, n
, old_lnum
, old_offs
);
2401 /* Ensure the znode is dirtied */
2402 if (znode
->cnext
|| !ubifs_zn_dirty(znode
)) {
2403 znode
= dirty_cow_bottom_up(c
, znode
);
2404 if (IS_ERR(znode
)) {
2405 err
= PTR_ERR(znode
);
2409 zbr
= &znode
->zbranch
[n
];
2411 err
= ubifs_add_dirt(c
, zbr
->lnum
,
2423 err
= ubifs_add_dirt(c
, lnum
, len
);
2426 err
= dbg_check_tnc(c
, 0);
2429 mutex_unlock(&c
->tnc_mutex
);
2434 * ubifs_tnc_add_nm - add a "hashed" node to TNC.
2435 * @c: UBIFS file-system description object
2437 * @lnum: LEB number of node
2438 * @offs: node offset
2440 * @hash: The hash over the node
2443 * This is the same as 'ubifs_tnc_add()' but it should be used with keys which
2444 * may have collisions, like directory entry keys.
2446 int ubifs_tnc_add_nm(struct ubifs_info
*c
, const union ubifs_key
*key
,
2447 int lnum
, int offs
, int len
, const u8
*hash
,
2448 const struct fscrypt_name
*nm
)
2450 int found
, n
, err
= 0;
2451 struct ubifs_znode
*znode
;
2453 mutex_lock(&c
->tnc_mutex
);
2454 dbg_tnck(key
, "LEB %d:%d, key ", lnum
, offs
);
2455 found
= lookup_level0_dirty(c
, key
, &znode
, &n
);
2463 found
= fallible_resolve_collision(c
, key
, &znode
, &n
,
2466 found
= resolve_collision(c
, key
, &znode
, &n
, nm
);
2467 dbg_tnc("rc returned %d, znode %p, n %d", found
, znode
, n
);
2473 /* Ensure the znode is dirtied */
2474 if (znode
->cnext
|| !ubifs_zn_dirty(znode
)) {
2475 znode
= dirty_cow_bottom_up(c
, znode
);
2476 if (IS_ERR(znode
)) {
2477 err
= PTR_ERR(znode
);
2483 struct ubifs_zbranch
*zbr
= &znode
->zbranch
[n
];
2486 err
= ubifs_add_dirt(c
, zbr
->lnum
, zbr
->len
);
2490 ubifs_copy_hash(c
, hash
, zbr
->hash
);
2496 struct ubifs_zbranch zbr
;
2502 ubifs_copy_hash(c
, hash
, zbr
.hash
);
2503 key_copy(c
, key
, &zbr
.key
);
2504 err
= tnc_insert(c
, znode
, &zbr
, n
+ 1);
2509 * We did not find it in the index so there may be a
2510 * dangling branch still in the index. So we remove it
2511 * by passing 'ubifs_tnc_remove_nm()' the same key but
2512 * an unmatchable name.
2514 struct fscrypt_name noname
= { .disk_name
= { .name
= "", .len
= 1 } };
2516 err
= dbg_check_tnc(c
, 0);
2517 mutex_unlock(&c
->tnc_mutex
);
2520 return ubifs_tnc_remove_nm(c
, key
, &noname
);
2526 err
= dbg_check_tnc(c
, 0);
2527 mutex_unlock(&c
->tnc_mutex
);
2532 * tnc_delete - delete a znode form TNC.
2533 * @c: UBIFS file-system description object
2534 * @znode: znode to delete from
2535 * @n: zbranch slot number to delete
2537 * This function deletes a leaf node from @n-th slot of @znode. Returns zero in
2538 * case of success and a negative error code in case of failure.
2540 static int tnc_delete(struct ubifs_info
*c
, struct ubifs_znode
*znode
, int n
)
2542 struct ubifs_zbranch
*zbr
;
2543 struct ubifs_znode
*zp
;
2546 /* Delete without merge for now */
2547 ubifs_assert(c
, znode
->level
== 0);
2548 ubifs_assert(c
, n
>= 0 && n
< c
->fanout
);
2549 dbg_tnck(&znode
->zbranch
[n
].key
, "deleting key ");
2551 zbr
= &znode
->zbranch
[n
];
2554 err
= ubifs_add_dirt(c
, zbr
->lnum
, zbr
->len
);
2556 ubifs_dump_znode(c
, znode
);
2560 /* We do not "gap" zbranch slots */
2561 for (i
= n
; i
< znode
->child_cnt
- 1; i
++)
2562 znode
->zbranch
[i
] = znode
->zbranch
[i
+ 1];
2563 znode
->child_cnt
-= 1;
2565 if (znode
->child_cnt
> 0)
2569 * This was the last zbranch, we have to delete this znode from the
2574 ubifs_assert(c
, !ubifs_zn_obsolete(znode
));
2575 ubifs_assert(c
, ubifs_zn_dirty(znode
));
2580 atomic_long_dec(&c
->dirty_zn_cnt
);
2582 err
= insert_old_idx_znode(c
, znode
);
2587 __set_bit(OBSOLETE_ZNODE
, &znode
->flags
);
2588 atomic_long_inc(&c
->clean_zn_cnt
);
2589 atomic_long_inc(&ubifs_clean_zn_cnt
);
2593 } while (znode
->child_cnt
== 1); /* while removing last child */
2595 /* Remove from znode, entry n - 1 */
2596 znode
->child_cnt
-= 1;
2597 ubifs_assert(c
, znode
->level
!= 0);
2598 for (i
= n
; i
< znode
->child_cnt
; i
++) {
2599 znode
->zbranch
[i
] = znode
->zbranch
[i
+ 1];
2600 if (znode
->zbranch
[i
].znode
)
2601 znode
->zbranch
[i
].znode
->iip
= i
;
2605 * If this is the root and it has only 1 child then
2606 * collapse the tree.
2608 if (!znode
->parent
) {
2609 while (znode
->child_cnt
== 1 && znode
->level
!= 0) {
2611 zbr
= &znode
->zbranch
[0];
2612 znode
= get_znode(c
, znode
, 0);
2614 return PTR_ERR(znode
);
2615 znode
= dirty_cow_znode(c
, zbr
);
2617 return PTR_ERR(znode
);
2618 znode
->parent
= NULL
;
2621 err
= insert_old_idx(c
, c
->zroot
.lnum
,
2626 c
->zroot
.lnum
= zbr
->lnum
;
2627 c
->zroot
.offs
= zbr
->offs
;
2628 c
->zroot
.len
= zbr
->len
;
2629 c
->zroot
.znode
= znode
;
2630 ubifs_assert(c
, !ubifs_zn_obsolete(zp
));
2631 ubifs_assert(c
, ubifs_zn_dirty(zp
));
2632 atomic_long_dec(&c
->dirty_zn_cnt
);
2635 __set_bit(OBSOLETE_ZNODE
, &zp
->flags
);
2636 atomic_long_inc(&c
->clean_zn_cnt
);
2637 atomic_long_inc(&ubifs_clean_zn_cnt
);
2647 * ubifs_tnc_remove - remove an index entry of a node.
2648 * @c: UBIFS file-system description object
2651 * Returns %0 on success or negative error code on failure.
2653 int ubifs_tnc_remove(struct ubifs_info
*c
, const union ubifs_key
*key
)
2655 int found
, n
, err
= 0;
2656 struct ubifs_znode
*znode
;
2658 mutex_lock(&c
->tnc_mutex
);
2659 dbg_tnck(key
, "key ");
2660 found
= lookup_level0_dirty(c
, key
, &znode
, &n
);
2666 err
= tnc_delete(c
, znode
, n
);
2668 err
= dbg_check_tnc(c
, 0);
2671 mutex_unlock(&c
->tnc_mutex
);
2676 * ubifs_tnc_remove_nm - remove an index entry for a "hashed" node.
2677 * @c: UBIFS file-system description object
2679 * @nm: directory entry name
2681 * Returns %0 on success or negative error code on failure.
2683 int ubifs_tnc_remove_nm(struct ubifs_info
*c
, const union ubifs_key
*key
,
2684 const struct fscrypt_name
*nm
)
2687 struct ubifs_znode
*znode
;
2689 mutex_lock(&c
->tnc_mutex
);
2690 dbg_tnck(key
, "key ");
2691 err
= lookup_level0_dirty(c
, key
, &znode
, &n
);
2697 err
= fallible_resolve_collision(c
, key
, &znode
, &n
,
2700 err
= resolve_collision(c
, key
, &znode
, &n
, nm
);
2701 dbg_tnc("rc returned %d, znode %p, n %d", err
, znode
, n
);
2705 /* Ensure the znode is dirtied */
2706 if (znode
->cnext
|| !ubifs_zn_dirty(znode
)) {
2707 znode
= dirty_cow_bottom_up(c
, znode
);
2708 if (IS_ERR(znode
)) {
2709 err
= PTR_ERR(znode
);
2713 err
= tnc_delete(c
, znode
, n
);
2719 err
= dbg_check_tnc(c
, 0);
2720 mutex_unlock(&c
->tnc_mutex
);
2725 * ubifs_tnc_remove_dh - remove an index entry for a "double hashed" node.
2726 * @c: UBIFS file-system description object
2728 * @cookie: node cookie for collision resolution
2730 * Returns %0 on success or negative error code on failure.
2732 int ubifs_tnc_remove_dh(struct ubifs_info
*c
, const union ubifs_key
*key
,
2736 struct ubifs_znode
*znode
;
2737 struct ubifs_dent_node
*dent
;
2738 struct ubifs_zbranch
*zbr
;
2740 if (!c
->double_hash
)
2743 mutex_lock(&c
->tnc_mutex
);
2744 err
= lookup_level0_dirty(c
, key
, &znode
, &n
);
2748 zbr
= &znode
->zbranch
[n
];
2749 dent
= kmalloc(UBIFS_MAX_DENT_NODE_SZ
, GFP_NOFS
);
2755 err
= tnc_read_hashed_node(c
, zbr
, dent
);
2759 /* If the cookie does not match, we're facing a hash collision. */
2760 if (le32_to_cpu(dent
->cookie
) != cookie
) {
2761 union ubifs_key start_key
;
2763 lowest_dent_key(c
, &start_key
, key_inum(c
, key
));
2765 err
= ubifs_lookup_level0(c
, &start_key
, &znode
, &n
);
2766 if (unlikely(err
< 0))
2769 err
= search_dh_cookie(c
, key
, dent
, cookie
, &znode
, &n
, err
);
2774 if (znode
->cnext
|| !ubifs_zn_dirty(znode
)) {
2775 znode
= dirty_cow_bottom_up(c
, znode
);
2776 if (IS_ERR(znode
)) {
2777 err
= PTR_ERR(znode
);
2781 err
= tnc_delete(c
, znode
, n
);
2787 err
= dbg_check_tnc(c
, 0);
2788 mutex_unlock(&c
->tnc_mutex
);
2793 * key_in_range - determine if a key falls within a range of keys.
2794 * @c: UBIFS file-system description object
2795 * @key: key to check
2796 * @from_key: lowest key in range
2797 * @to_key: highest key in range
2799 * This function returns %1 if the key is in range and %0 otherwise.
2801 static int key_in_range(struct ubifs_info
*c
, union ubifs_key
*key
,
2802 union ubifs_key
*from_key
, union ubifs_key
*to_key
)
2804 if (keys_cmp(c
, key
, from_key
) < 0)
2806 if (keys_cmp(c
, key
, to_key
) > 0)
2812 * ubifs_tnc_remove_range - remove index entries in range.
2813 * @c: UBIFS file-system description object
2814 * @from_key: lowest key to remove
2815 * @to_key: highest key to remove
2817 * This function removes index entries starting at @from_key and ending at
2818 * @to_key. This function returns zero in case of success and a negative error
2819 * code in case of failure.
2821 int ubifs_tnc_remove_range(struct ubifs_info
*c
, union ubifs_key
*from_key
,
2822 union ubifs_key
*to_key
)
2824 int i
, n
, k
, err
= 0;
2825 struct ubifs_znode
*znode
;
2826 union ubifs_key
*key
;
2828 mutex_lock(&c
->tnc_mutex
);
2830 /* Find first level 0 znode that contains keys to remove */
2831 err
= ubifs_lookup_level0(c
, from_key
, &znode
, &n
);
2838 err
= tnc_next(c
, &znode
, &n
);
2839 if (err
== -ENOENT
) {
2845 key
= &znode
->zbranch
[n
].key
;
2846 if (!key_in_range(c
, key
, from_key
, to_key
)) {
2852 /* Ensure the znode is dirtied */
2853 if (znode
->cnext
|| !ubifs_zn_dirty(znode
)) {
2854 znode
= dirty_cow_bottom_up(c
, znode
);
2855 if (IS_ERR(znode
)) {
2856 err
= PTR_ERR(znode
);
2861 /* Remove all keys in range except the first */
2862 for (i
= n
+ 1, k
= 0; i
< znode
->child_cnt
; i
++, k
++) {
2863 key
= &znode
->zbranch
[i
].key
;
2864 if (!key_in_range(c
, key
, from_key
, to_key
))
2866 lnc_free(&znode
->zbranch
[i
]);
2867 err
= ubifs_add_dirt(c
, znode
->zbranch
[i
].lnum
,
2868 znode
->zbranch
[i
].len
);
2870 ubifs_dump_znode(c
, znode
);
2873 dbg_tnck(key
, "removing key ");
2876 for (i
= n
+ 1 + k
; i
< znode
->child_cnt
; i
++)
2877 znode
->zbranch
[i
- k
] = znode
->zbranch
[i
];
2878 znode
->child_cnt
-= k
;
2881 /* Now delete the first */
2882 err
= tnc_delete(c
, znode
, n
);
2889 err
= dbg_check_tnc(c
, 0);
2890 mutex_unlock(&c
->tnc_mutex
);
2895 * ubifs_tnc_remove_ino - remove an inode from TNC.
2896 * @c: UBIFS file-system description object
2897 * @inum: inode number to remove
2899 * This function remove inode @inum and all the extended attributes associated
2900 * with the anode from TNC and returns zero in case of success or a negative
2901 * error code in case of failure.
2903 int ubifs_tnc_remove_ino(struct ubifs_info
*c
, ino_t inum
)
2905 union ubifs_key key1
, key2
;
2906 struct ubifs_dent_node
*xent
, *pxent
= NULL
;
2907 struct fscrypt_name nm
= {0};
2909 dbg_tnc("ino %lu", (unsigned long)inum
);
2912 * Walk all extended attribute entries and remove them together with
2913 * corresponding extended attribute inodes.
2915 lowest_xent_key(c
, &key1
, inum
);
2920 xent
= ubifs_tnc_next_ent(c
, &key1
, &nm
);
2922 err
= PTR_ERR(xent
);
2929 xattr_inum
= le64_to_cpu(xent
->inum
);
2930 dbg_tnc("xent '%s', ino %lu", xent
->name
,
2931 (unsigned long)xattr_inum
);
2933 fname_name(&nm
) = xent
->name
;
2934 fname_len(&nm
) = le16_to_cpu(xent
->nlen
);
2935 err
= ubifs_tnc_remove_nm(c
, &key1
, &nm
);
2942 lowest_ino_key(c
, &key1
, xattr_inum
);
2943 highest_ino_key(c
, &key2
, xattr_inum
);
2944 err
= ubifs_tnc_remove_range(c
, &key1
, &key2
);
2953 key_read(c
, &xent
->key
, &key1
);
2957 lowest_ino_key(c
, &key1
, inum
);
2958 highest_ino_key(c
, &key2
, inum
);
2960 return ubifs_tnc_remove_range(c
, &key1
, &key2
);
2964 * ubifs_tnc_next_ent - walk directory or extended attribute entries.
2965 * @c: UBIFS file-system description object
2966 * @key: key of last entry
2967 * @nm: name of last entry found or %NULL
2969 * This function finds and reads the next directory or extended attribute entry
2970 * after the given key (@key) if there is one. @nm is used to resolve
2973 * If the name of the current entry is not known and only the key is known,
2974 * @nm->name has to be %NULL. In this case the semantics of this function is a
2975 * little bit different and it returns the entry corresponding to this key, not
2976 * the next one. If the key was not found, the closest "right" entry is
2979 * If the fist entry has to be found, @key has to contain the lowest possible
2980 * key value for this inode and @name has to be %NULL.
2982 * This function returns the found directory or extended attribute entry node
2983 * in case of success, %-ENOENT is returned if no entry was found, and a
2984 * negative error code is returned in case of failure.
2986 struct ubifs_dent_node
*ubifs_tnc_next_ent(struct ubifs_info
*c
,
2987 union ubifs_key
*key
,
2988 const struct fscrypt_name
*nm
)
2990 int n
, err
, type
= key_type(c
, key
);
2991 struct ubifs_znode
*znode
;
2992 struct ubifs_dent_node
*dent
;
2993 struct ubifs_zbranch
*zbr
;
2994 union ubifs_key
*dkey
;
2996 dbg_tnck(key
, "key ");
2997 ubifs_assert(c
, is_hash_key(c
, key
));
2999 mutex_lock(&c
->tnc_mutex
);
3000 err
= ubifs_lookup_level0(c
, key
, &znode
, &n
);
3001 if (unlikely(err
< 0))
3004 if (fname_len(nm
) > 0) {
3006 /* Handle collisions */
3008 err
= fallible_resolve_collision(c
, key
, &znode
, &n
,
3011 err
= resolve_collision(c
, key
, &znode
, &n
, nm
);
3012 dbg_tnc("rc returned %d, znode %p, n %d",
3014 if (unlikely(err
< 0))
3018 /* Now find next entry */
3019 err
= tnc_next(c
, &znode
, &n
);
3024 * The full name of the entry was not given, in which case the
3025 * behavior of this function is a little different and it
3026 * returns current entry, not the next one.
3030 * However, the given key does not exist in the TNC
3031 * tree and @znode/@n variables contain the closest
3032 * "preceding" element. Switch to the next one.
3034 err
= tnc_next(c
, &znode
, &n
);
3040 zbr
= &znode
->zbranch
[n
];
3041 dent
= kmalloc(zbr
->len
, GFP_NOFS
);
3042 if (unlikely(!dent
)) {
3048 * The above 'tnc_next()' call could lead us to the next inode, check
3052 if (key_inum(c
, dkey
) != key_inum(c
, key
) ||
3053 key_type(c
, dkey
) != type
) {
3058 err
= tnc_read_hashed_node(c
, zbr
, dent
);
3062 mutex_unlock(&c
->tnc_mutex
);
3068 mutex_unlock(&c
->tnc_mutex
);
3069 return ERR_PTR(err
);
3073 * tnc_destroy_cnext - destroy left-over obsolete znodes from a failed commit.
3074 * @c: UBIFS file-system description object
3076 * Destroy left-over obsolete znodes from a failed commit.
3078 static void tnc_destroy_cnext(struct ubifs_info
*c
)
3080 struct ubifs_znode
*cnext
;
3084 ubifs_assert(c
, c
->cmt_state
== COMMIT_BROKEN
);
3087 struct ubifs_znode
*znode
= cnext
;
3089 cnext
= cnext
->cnext
;
3090 if (ubifs_zn_obsolete(znode
))
3092 else if (!ubifs_zn_cow(znode
)) {
3094 * Don't forget to update clean znode count after
3095 * committing failed, because ubifs will check this
3096 * count while closing tnc. Non-obsolete znode could
3097 * be re-dirtied during committing process, so dirty
3098 * flag is untrustable. The flag 'COW_ZNODE' is set
3099 * for each dirty znode before committing, and it is
3100 * cleared as long as the znode become clean, so we
3101 * can statistic clean znode count according to this
3104 atomic_long_inc(&c
->clean_zn_cnt
);
3105 atomic_long_inc(&ubifs_clean_zn_cnt
);
3107 } while (cnext
&& cnext
!= c
->cnext
);
3111 * ubifs_tnc_close - close TNC subsystem and free all related resources.
3112 * @c: UBIFS file-system description object
3114 void ubifs_tnc_close(struct ubifs_info
*c
)
3116 tnc_destroy_cnext(c
);
3117 ubifs_destroy_tnc_tree(c
);
3124 * left_znode - get the znode to the left.
3125 * @c: UBIFS file-system description object
3128 * This function returns a pointer to the znode to the left of @znode or NULL if
3129 * there is not one. A negative error code is returned on failure.
3131 static struct ubifs_znode
*left_znode(struct ubifs_info
*c
,
3132 struct ubifs_znode
*znode
)
3134 int level
= znode
->level
;
3137 int n
= znode
->iip
- 1;
3139 /* Go up until we can go left */
3140 znode
= znode
->parent
;
3144 /* Now go down the rightmost branch to 'level' */
3145 znode
= get_znode(c
, znode
, n
);
3148 while (znode
->level
!= level
) {
3149 n
= znode
->child_cnt
- 1;
3150 znode
= get_znode(c
, znode
, n
);
3161 * right_znode - get the znode to the right.
3162 * @c: UBIFS file-system description object
3165 * This function returns a pointer to the znode to the right of @znode or NULL
3166 * if there is not one. A negative error code is returned on failure.
3168 static struct ubifs_znode
*right_znode(struct ubifs_info
*c
,
3169 struct ubifs_znode
*znode
)
3171 int level
= znode
->level
;
3174 int n
= znode
->iip
+ 1;
3176 /* Go up until we can go right */
3177 znode
= znode
->parent
;
3180 if (n
< znode
->child_cnt
) {
3181 /* Now go down the leftmost branch to 'level' */
3182 znode
= get_znode(c
, znode
, n
);
3185 while (znode
->level
!= level
) {
3186 znode
= get_znode(c
, znode
, 0);
3197 * lookup_znode - find a particular indexing node from TNC.
3198 * @c: UBIFS file-system description object
3199 * @key: index node key to lookup
3200 * @level: index node level
3201 * @lnum: index node LEB number
3202 * @offs: index node offset
3204 * This function searches an indexing node by its first key @key and its
3205 * address @lnum:@offs. It looks up the indexing tree by pulling all indexing
3206 * nodes it traverses to TNC. This function is called for indexing nodes which
3207 * were found on the media by scanning, for example when garbage-collecting or
3208 * when doing in-the-gaps commit. This means that the indexing node which is
3209 * looked for does not have to have exactly the same leftmost key @key, because
3210 * the leftmost key may have been changed, in which case TNC will contain a
3211 * dirty znode which still refers the same @lnum:@offs. This function is clever
3212 * enough to recognize such indexing nodes.
3214 * Note, if a znode was deleted or changed too much, then this function will
3215 * not find it. For situations like this UBIFS has the old index RB-tree
3216 * (indexed by @lnum:@offs).
3218 * This function returns a pointer to the znode found or %NULL if it is not
3219 * found. A negative error code is returned on failure.
3221 static struct ubifs_znode
*lookup_znode(struct ubifs_info
*c
,
3222 union ubifs_key
*key
, int level
,
3225 struct ubifs_znode
*znode
, *zn
;
3228 ubifs_assert(c
, key_type(c
, key
) < UBIFS_INVALID_KEY
);
3231 * The arguments have probably been read off flash, so don't assume
3235 return ERR_PTR(-EINVAL
);
3237 /* Get the root znode */
3238 znode
= c
->zroot
.znode
;
3240 znode
= ubifs_load_znode(c
, &c
->zroot
, NULL
, 0);
3244 /* Check if it is the one we are looking for */
3245 if (c
->zroot
.lnum
== lnum
&& c
->zroot
.offs
== offs
)
3247 /* Descend to the parent level i.e. (level + 1) */
3248 if (level
>= znode
->level
)
3251 ubifs_search_zbranch(c
, znode
, key
, &n
);
3254 * We reached a znode where the leftmost key is greater
3255 * than the key we are searching for. This is the same
3256 * situation as the one described in a huge comment at
3257 * the end of the 'ubifs_lookup_level0()' function. And
3258 * for exactly the same reasons we have to try to look
3259 * left before giving up.
3261 znode
= left_znode(c
, znode
);
3266 ubifs_search_zbranch(c
, znode
, key
, &n
);
3267 ubifs_assert(c
, n
>= 0);
3269 if (znode
->level
== level
+ 1)
3271 znode
= get_znode(c
, znode
, n
);
3275 /* Check if the child is the one we are looking for */
3276 if (znode
->zbranch
[n
].lnum
== lnum
&& znode
->zbranch
[n
].offs
== offs
)
3277 return get_znode(c
, znode
, n
);
3278 /* If the key is unique, there is nowhere else to look */
3279 if (!is_hash_key(c
, key
))
3282 * The key is not unique and so may be also in the znodes to either
3289 /* Move one branch to the left */
3293 znode
= left_znode(c
, znode
);
3298 n
= znode
->child_cnt
- 1;
3301 if (znode
->zbranch
[n
].lnum
== lnum
&&
3302 znode
->zbranch
[n
].offs
== offs
)
3303 return get_znode(c
, znode
, n
);
3304 /* Stop if the key is less than the one we are looking for */
3305 if (keys_cmp(c
, &znode
->zbranch
[n
].key
, key
) < 0)
3308 /* Back to the middle */
3313 /* Move one branch to the right */
3314 if (++n
>= znode
->child_cnt
) {
3315 znode
= right_znode(c
, znode
);
3323 if (znode
->zbranch
[n
].lnum
== lnum
&&
3324 znode
->zbranch
[n
].offs
== offs
)
3325 return get_znode(c
, znode
, n
);
3326 /* Stop if the key is greater than the one we are looking for */
3327 if (keys_cmp(c
, &znode
->zbranch
[n
].key
, key
) > 0)
3334 * is_idx_node_in_tnc - determine if an index node is in the TNC.
3335 * @c: UBIFS file-system description object
3336 * @key: key of index node
3337 * @level: index node level
3338 * @lnum: LEB number of index node
3339 * @offs: offset of index node
3341 * This function returns %0 if the index node is not referred to in the TNC, %1
3342 * if the index node is referred to in the TNC and the corresponding znode is
3343 * dirty, %2 if an index node is referred to in the TNC and the corresponding
3344 * znode is clean, and a negative error code in case of failure.
3346 * Note, the @key argument has to be the key of the first child. Also note,
3347 * this function relies on the fact that 0:0 is never a valid LEB number and
3348 * offset for a main-area node.
3350 int is_idx_node_in_tnc(struct ubifs_info
*c
, union ubifs_key
*key
, int level
,
3353 struct ubifs_znode
*znode
;
3355 znode
= lookup_znode(c
, key
, level
, lnum
, offs
);
3359 return PTR_ERR(znode
);
3361 return ubifs_zn_dirty(znode
) ? 1 : 2;
3365 * is_leaf_node_in_tnc - determine if a non-indexing not is in the TNC.
3366 * @c: UBIFS file-system description object
3368 * @lnum: node LEB number
3369 * @offs: node offset
3371 * This function returns %1 if the node is referred to in the TNC, %0 if it is
3372 * not, and a negative error code in case of failure.
3374 * Note, this function relies on the fact that 0:0 is never a valid LEB number
3375 * and offset for a main-area node.
3377 static int is_leaf_node_in_tnc(struct ubifs_info
*c
, union ubifs_key
*key
,
3380 struct ubifs_zbranch
*zbr
;
3381 struct ubifs_znode
*znode
, *zn
;
3382 int n
, found
, err
, nn
;
3383 const int unique
= !is_hash_key(c
, key
);
3385 found
= ubifs_lookup_level0(c
, key
, &znode
, &n
);
3387 return found
; /* Error code */
3390 zbr
= &znode
->zbranch
[n
];
3391 if (lnum
== zbr
->lnum
&& offs
== zbr
->offs
)
3392 return 1; /* Found it */
3396 * Because the key is not unique, we have to look left
3403 err
= tnc_prev(c
, &znode
, &n
);
3408 if (keys_cmp(c
, key
, &znode
->zbranch
[n
].key
))
3410 zbr
= &znode
->zbranch
[n
];
3411 if (lnum
== zbr
->lnum
&& offs
== zbr
->offs
)
3412 return 1; /* Found it */
3418 err
= tnc_next(c
, &znode
, &n
);
3424 if (keys_cmp(c
, key
, &znode
->zbranch
[n
].key
))
3426 zbr
= &znode
->zbranch
[n
];
3427 if (lnum
== zbr
->lnum
&& offs
== zbr
->offs
)
3428 return 1; /* Found it */
3434 * ubifs_tnc_has_node - determine whether a node is in the TNC.
3435 * @c: UBIFS file-system description object
3437 * @level: index node level (if it is an index node)
3438 * @lnum: node LEB number
3439 * @offs: node offset
3440 * @is_idx: non-zero if the node is an index node
3442 * This function returns %1 if the node is in the TNC, %0 if it is not, and a
3443 * negative error code in case of failure. For index nodes, @key has to be the
3444 * key of the first child. An index node is considered to be in the TNC only if
3445 * the corresponding znode is clean or has not been loaded.
3447 int ubifs_tnc_has_node(struct ubifs_info
*c
, union ubifs_key
*key
, int level
,
3448 int lnum
, int offs
, int is_idx
)
3452 mutex_lock(&c
->tnc_mutex
);
3454 err
= is_idx_node_in_tnc(c
, key
, level
, lnum
, offs
);
3458 /* The index node was found but it was dirty */
3461 /* The index node was found and it was clean */
3466 err
= is_leaf_node_in_tnc(c
, key
, lnum
, offs
);
3469 mutex_unlock(&c
->tnc_mutex
);
3474 * ubifs_dirty_idx_node - dirty an index node.
3475 * @c: UBIFS file-system description object
3476 * @key: index node key
3477 * @level: index node level
3478 * @lnum: index node LEB number
3479 * @offs: index node offset
3481 * This function loads and dirties an index node so that it can be garbage
3482 * collected. The @key argument has to be the key of the first child. This
3483 * function relies on the fact that 0:0 is never a valid LEB number and offset
3484 * for a main-area node. Returns %0 on success and a negative error code on
3487 int ubifs_dirty_idx_node(struct ubifs_info
*c
, union ubifs_key
*key
, int level
,
3490 struct ubifs_znode
*znode
;
3493 mutex_lock(&c
->tnc_mutex
);
3494 znode
= lookup_znode(c
, key
, level
, lnum
, offs
);
3497 if (IS_ERR(znode
)) {
3498 err
= PTR_ERR(znode
);
3501 znode
= dirty_cow_bottom_up(c
, znode
);
3502 if (IS_ERR(znode
)) {
3503 err
= PTR_ERR(znode
);
3508 mutex_unlock(&c
->tnc_mutex
);
3513 * dbg_check_inode_size - check if inode size is correct.
3514 * @c: UBIFS file-system description object
3515 * @inode: inode to check
3518 * This function makes sure that the inode size (@size) is correct and it does
3519 * not have any pages beyond @size. Returns zero if the inode is OK, %-EINVAL
3520 * if it has a data page beyond @size, and other negative error code in case of
3523 int dbg_check_inode_size(struct ubifs_info
*c
, const struct inode
*inode
,
3527 union ubifs_key from_key
, to_key
, *key
;
3528 struct ubifs_znode
*znode
;
3531 if (!S_ISREG(inode
->i_mode
))
3533 if (!dbg_is_chk_gen(c
))
3536 block
= (size
+ UBIFS_BLOCK_SIZE
- 1) >> UBIFS_BLOCK_SHIFT
;
3537 data_key_init(c
, &from_key
, inode
->i_ino
, block
);
3538 highest_data_key(c
, &to_key
, inode
->i_ino
);
3540 mutex_lock(&c
->tnc_mutex
);
3541 err
= ubifs_lookup_level0(c
, &from_key
, &znode
, &n
);
3550 err
= tnc_next(c
, &znode
, &n
);
3551 if (err
== -ENOENT
) {
3558 ubifs_assert(c
, err
== 0);
3559 key
= &znode
->zbranch
[n
].key
;
3560 if (!key_in_range(c
, key
, &from_key
, &to_key
))
3564 block
= key_block(c
, key
);
3565 ubifs_err(c
, "inode %lu has size %lld, but there are data at offset %lld",
3566 (unsigned long)inode
->i_ino
, size
,
3567 ((loff_t
)block
) << UBIFS_BLOCK_SHIFT
);
3568 mutex_unlock(&c
->tnc_mutex
);
3569 ubifs_dump_inode(c
, inode
);
3574 mutex_unlock(&c
->tnc_mutex
);