ftl: fix address calculation in read_page_desc()

This commit is contained in:
S.J.R. van Schaik 2017-09-19 14:23:20 +02:00
parent bbc799f805
commit f0a8439c51

View file

@ -87,11 +87,15 @@ int read_page_desc(struct ftl_map *map,
{
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) +
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)
return -1;