From cbd395e137ac7422c3c8bf02b79aaf8b1bae6f39 Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Fri, 16 Jun 2017 16:16:24 +0200 Subject: [PATCH] mufs: optimise memory footprint of mufs_do_lookup() --- source/fs/mufs/tree.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/source/fs/mufs/tree.c b/source/fs/mufs/tree.c index a37f516..b6c0875 100644 --- a/source/fs/mufs/tree.c +++ b/source/fs/mufs/tree.c @@ -32,8 +32,7 @@ static int mufs_do_lookup(struct mufs *fs, uint32_t *page, unsigned alloc) { struct flash_dev *dev = fs->dev; - char data[1 << dev->log2_block_size]; - uint32_t *table = (uint32_t *)data; + uint32_t entry; size_t index; if (!base) @@ -44,27 +43,27 @@ static int mufs_do_lookup(struct mufs *fs, uint32_t *page, return 0; } - if (flash_read(dev, base << dev->log2_block_size, data, - sizeof data) == 0) - return -1; - index = va & ((1 << ((depth - 1) * fs->log2_nentries)) - 1); - if (!table[index]) { + if (flash_read(dev, (base << dev->log2_block_size) + index * sizeof entry, + &entry, sizeof entry) == 0) + return -1; + + if (!entry) { if (alloc) { if (depth == 1 && new_page) { - table[index] = new_page; - } else if (mufs_alloc_block(fs, &table[index]) < 0) { + entry = new_page; + } else if (mufs_alloc_block(fs, &entry) < 0) { return -1; } } - if (flash_write(dev, base << dev->log2_block_size, data, - sizeof data) == 0) + if (flash_write(dev, (base << dev->log2_block_size) + + index * sizeof entry, &entry, sizeof entry) == 0) return -1; } - return mufs_do_lookup(fs, page, table[index], depth - 1, va, new_page, + return mufs_do_lookup(fs, page, entry, depth - 1, va, new_page, alloc); }