From 55ce3b8798cd20da875f3e6dca7d8099fa1fdf15 Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Mon, 29 May 2017 18:55:37 +0200 Subject: [PATCH] mufs: calculate proper byte offsets in mufs_read()/mufs_write() --- source/fs/mufs/tree.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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,