diff --git a/source/fs/mufs/tree.c b/source/fs/mufs/tree.c index f100b05..6f1e426 100644 --- a/source/fs/mufs/tree.c +++ b/source/fs/mufs/tree.c @@ -177,7 +177,8 @@ static size_t mufs_do_read(struct mufs *fs, struct mufs_tree *tree, if (mufs_lookup_page(fs, tree, &page, va) < 0) return 0; - return flash_read(fs->dev, page, data, len); + return flash_read(fs->dev, (page << fs->dev->log2_block_size) + offset, + data, len); } size_t mufs_read(struct mufs *fs, struct mufs_tree *tree, void *data, @@ -209,10 +210,14 @@ static size_t mufs_do_write(struct mufs *fs, struct mufs_tree *tree, memset(data, 0, len); len = min(len, (UINT32_C(1) << fs->dev->log2_block_size) - offset); + if (mufs_extend_tree(fs, tree, 1) < 0) + return 0; + if (mufs_alloc_page(fs, tree, &page, va) < 0) return 0; - return flash_write(fs->dev, page, data, len); + return flash_write(fs->dev, (page << fs->dev->log2_block_size) + offset, + data, len); } size_t mufs_write(struct mufs *fs, struct mufs_tree *tree, void *data,