| Function report | 
| Source Code: fs\verity\enable.c | Create Date:2022-07-28 20:24:31 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:build_merkle_tree_level
Proto:static int build_merkle_tree_level(struct inode *inode, unsigned int level, u64 num_blocks_to_hash, const struct merkle_tree_params *params, u8 *pending_hashes, struct ahash_request *req)
Type:int
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| struct inode * | inode | |
| unsigned int | level | |
| u64 | num_blocks_to_hash | |
| const struct merkle_tree_params * | params | |
| u8 * | pending_hashes | |
| struct ahash_request * | req | 
| 23 | pending_size = 0 | 
| 28 | If WARN_ON(size of data and tree blocks != PAGE_SIZE) Then Return -EINVAL | 
| 31 | If level < umber of levels in Merkle tree Then | 
| 33 | Else | 
| 34 | If WARN_ON(num_blocks_to_hash != 1) Then Return -EINVAL | 
| 36 | dst_block_num = 0 | 
| 39 | When i < num_blocks_to_hash cycle | 
| 42 | If i % 10000 == 0 || i + 1 == num_blocks_to_hash Then pr_debug("Hashing block %llu of %llu for level %u\n", i + 1, num_blocks_to_hash, level) | 
| 46 | If level == 0 Then | 
| 48 | src_page = read_mapping_page(i_mapping, i, NULL) | 
| 56 | Else | 
| 58 | src_page = read_merkle_tree_page(inode, Starting block index for each tree level, ordered from leaf level (0)* to root level ('num_levels - 1')[level - 1] + i) | 
| 62 | fsverity_err(inode, "Error %d reading Merkle tree page %llu", err, Starting block index for each tree level, ordered from leaf level (0)* to root level ('num_levels - 1')[level - 1] + i) | 
| 65 | Return err | 
| 69 | err = fsverity_hash_page(params, inode, req, src_page, & pending_hashes[pending_size]) | 
| 76 | If level == umber of levels in Merkle tree Then Return 0 | 
| 79 | If pending_size + same as hash_alg->digest_size > size of data and tree blocks || i + 1 == num_blocks_to_hash Then | 
| 82 | memset( & pending_hashes[pending_size], 0, size of data and tree blocks - pending_size) | 
| 88 | If err Then | 
| 89 | fsverity_err(inode, "Error %d writing Merkle tree block %llu", err, dst_block_num) | 
| 92 | Return err | 
| 94 | dst_block_num++ | 
| 95 | pending_size = 0 | 
| 98 | If fatal_signal_pending(current process) Then Return -EINTR | 
| 100 | cond_resched() | 
| 102 | Return 0 | 
| Name | Describe | 
|---|---|
| build_merkle_tree | Build the Merkle tree for the given inode using the given parameters, and* return the root hash in @root_hash.* The tree is written to a filesystem-specific location as determined by the* ->write_merkle_tree_block() method | 
| Source code conversion tool public plug-in interface | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |