mufs: only manage blocks in data area
This commit is contained in:
parent
847241bbb8
commit
3b601ea588
1 changed files with 14 additions and 4 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue