diff --git a/core/include/tee/fs_htree.h b/core/include/tee/fs_htree.h index a8e7e3b91f8..a25c670cd2e 100644 --- a/core/include/tee/fs_htree.h +++ b/core/include/tee/fs_htree.h @@ -125,6 +125,11 @@ void tee_fs_htree_close(struct tee_fs_htree **ht); */ struct tee_fs_htree_meta *tee_fs_htree_get_meta(struct tee_fs_htree *ht); +/** + * tee_fs_htree_meta_set_dirty() - tell hash tree that meta were modified + */ +void tee_fs_htree_meta_set_dirty(struct tee_fs_htree *ht); + /** * tee_fs_htree_sync_to_storage() - synchronize hash tree to storage * @ht: hash tree diff --git a/core/tee/fs_htree.c b/core/tee/fs_htree.c index 59693c23324..71b150b0d86 100644 --- a/core/tee/fs_htree.c +++ b/core/tee/fs_htree.c @@ -667,6 +667,11 @@ struct tee_fs_htree_meta *tee_fs_htree_get_meta(struct tee_fs_htree *ht) return &ht->imeta.meta; } +void tee_fs_htree_meta_set_dirty(struct tee_fs_htree *ht) +{ + ht->dirty = true; +} + static TEE_Result free_node(struct traverse_arg *targ __unused, struct htree_node *node) { diff --git a/core/tee/tee_ree_fs.c b/core/tee/tee_ree_fs.c index b50642778e2..b000da1301c 100644 --- a/core/tee/tee_ree_fs.c +++ b/core/tee/tee_ree_fs.c @@ -99,8 +99,10 @@ static TEE_Result out_of_place_write(struct tee_fs_fd *fdp, size_t pos, pos += size_to_write; } - if (pos > meta->length) + if (pos > meta->length) { meta->length = pos; + tee_fs_htree_meta_set_dirty(fdp->ht); + } exit: free(block); @@ -267,6 +269,7 @@ static TEE_Result ree_fs_ftruncate_internal(struct tee_fs_fd *fdp, return res; meta->length = new_file_len; + tee_fs_htree_meta_set_dirty(fdp->ht); } return TEE_SUCCESS;