diff --git a/source/fs/mufs/super.c b/source/fs/mufs/super.c index 1a91772..31bdda8 100644 --- a/source/fs/mufs/super.c +++ b/source/fs/mufs/super.c @@ -60,11 +60,25 @@ void mufs_unmount(struct mufs *fs) int mufs_format(struct flash_dev *dev) { + struct mufs fs; struct mufs_super super; + uint8_t log2_bits_per_block = dev->log2_block_size + ilog2(8); + size_t nbitmap_size; + uint32_t block; + + fs.dev = dev; + fs.nblocks = flash_get_capacity(dev) >> dev->log2_block_size; + nbitmap_size = align_up(fs.nblocks, log2_bits_per_block) >> + log2_bits_per_block; + + flash_erase(dev, 1, nbitmap_size); + + for (block = 0; block < 1 + nbitmap_size; ++block) + mufs_mark_block(&fs, block, 1); memcpy(super.magic, "mufs", 4); - super.nblocks = flash_get_capacity(dev) >> dev->log2_block_size; + super.nblocks = fs.nblocks; super.root.file_size = 0; super.root.root = 0;