mufs: only manage blocks in data area

This commit is contained in:
S.J.R. van Schaik 2017-05-29 18:53:29 +02:00
parent 847241bbb8
commit 3b601ea588

View file

@ -40,6 +40,8 @@ int mufs_alloc_block(struct mufs *fs, uint32_t *found)
uint32_t block = 0;
size_t index;
uint8_t log2_bits_per_block = fs->dev->log2_block_size + ilog2(8);
size_t nbitmap_size = align_up(fs->nblocks, log2_bits_per_block) >>
log2_bits_per_block;
while (nblocks) {
if (flash_read(fs->dev, (1 + block) << fs->dev->log2_block_size, data,
@ -54,9 +56,10 @@ int mufs_alloc_block(struct mufs *fs, uint32_t *found)
continue;
}
*found = (block << log2_bits_per_block) + index;
index += block << log2_bits_per_block;
*found = 1 + nbitmap_size + index;
return mufs_mark_block(fs, *found, 1);
return mufs_mark_block(fs, index, 1);
}
return -1;
@ -64,8 +67,15 @@ int mufs_alloc_block(struct mufs *fs, uint32_t *found)
int mufs_free_block(struct mufs *fs, uint32_t block)
{
flash_erase(fs->dev, (1 + block) << fs->dev->log2_block_size,
uint8_t log2_bits_per_block = fs->dev->log2_block_size + ilog2(8);
size_t nbitmap_size = align_up(fs->nblocks, log2_bits_per_block) >>
log2_bits_per_block;
if (block < 1 + nbitmap_size)
return -1;
flash_erase(fs->dev, block << fs->dev->log2_block_size,
1 << fs->dev->log2_block_size);
return mufs_mark_block(fs, block, 0);
return mufs_mark_block(fs, block - 1 - nbitmap_size, 0);
}