ftl: fix address calculation in read_page_desc()
This commit is contained in:
parent
bbc799f805
commit
f0a8439c51
1 changed files with 7 additions and 3 deletions
|
@ -87,11 +87,15 @@ int read_page_desc(struct ftl_map *map,
|
||||||
{
|
{
|
||||||
uint32_t addr, offset;
|
uint32_t addr, offset;
|
||||||
|
|
||||||
|
addr = align(upage, map->log2_pages_per_group) +
|
||||||
|
(1 << map->log2_pages_per_group) - 1;
|
||||||
|
|
||||||
|
if (addr == upage)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
addr <<= map->log2_page_size;
|
||||||
offset = sizeof(struct ftl_page_group) +
|
offset = sizeof(struct ftl_page_group) +
|
||||||
BIT_MASK(upage, map->log2_pages_per_group) * sizeof *page_desc;
|
BIT_MASK(upage, map->log2_pages_per_group) * sizeof *page_desc;
|
||||||
upage = align(upage, map->log2_pages_per_group) +
|
|
||||||
(1 << map->log2_pages_per_group) - 1;
|
|
||||||
addr = upage << map->log2_page_size;
|
|
||||||
|
|
||||||
if (flash_read(map->dev, addr + offset, page_desc, sizeof *page_desc) == 0)
|
if (flash_read(map->dev, addr + offset, page_desc, sizeof *page_desc) == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue