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;
|
uint32_t block = 0;
|
||||||
size_t index;
|
size_t index;
|
||||||
uint8_t log2_bits_per_block = fs->dev->log2_block_size + ilog2(8);
|
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) {
|
while (nblocks) {
|
||||||
if (flash_read(fs->dev, (1 + block) << fs->dev->log2_block_size, data,
|
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;
|
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;
|
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)
|
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);
|
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