ftl: fix read_page_desc() and write_page_desc() to use proper offsets
This commit is contained in:
parent
f44581b648
commit
5b21fe9813
1 changed files with 13 additions and 13 deletions
|
@ -85,13 +85,13 @@ int read_page_group(struct ftl_map *map,
|
|||
int read_page_desc(struct ftl_map *map,
|
||||
struct ftl_page_desc *page_desc, uint32_t upage)
|
||||
{
|
||||
uint32_t group_no, page, addr, offset;
|
||||
uint32_t addr, offset;
|
||||
|
||||
group_no = upage >> map->log2_pages_per_group;
|
||||
page = ((group_no + 1) << map->log2_pages_per_group) - 1;
|
||||
addr = page << map->log2_page_size;
|
||||
offset = sizeof(struct ftl_page_group) +
|
||||
(upage & ((1 << map->log2_pages_per_group) - 1)) * 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)
|
||||
return -1;
|
||||
|
@ -109,14 +109,17 @@ int write_page_desc(struct ftl_map *map,
|
|||
struct ftl_page_desc *page_desc)
|
||||
{
|
||||
struct ftl_page_group group;
|
||||
uint32_t group_no, page, addr, offset, head;
|
||||
uint32_t upage, addr, offset, head;
|
||||
|
||||
group_no = map->head >> map->log2_pages_per_group;
|
||||
page = ((group_no + 1) << map->log2_pages_per_group) - 1;
|
||||
addr = page << map->log2_page_size;
|
||||
upage = map->head;
|
||||
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;
|
||||
|
||||
/* Write the page group header. */
|
||||
if (flash_is_erased(map->dev, page, 1)) {
|
||||
if (flash_is_erased(map->dev, upage, 1)) {
|
||||
memcpy(&group.magic, "FTL", sizeof group.magic);
|
||||
group.epoch = map->epoch;
|
||||
group.tail = map->tail;
|
||||
|
@ -125,9 +128,6 @@ int write_page_desc(struct ftl_map *map,
|
|||
return -1;
|
||||
}
|
||||
|
||||
offset = sizeof group + (map->head & ((1 << map->log2_pages_per_group) - 1)) *
|
||||
sizeof *page_desc;
|
||||
|
||||
memcpy(page_desc->magic, "page", sizeof page_desc->magic);
|
||||
|
||||
if (flash_write(map->dev, addr + offset, page_desc, sizeof *page_desc) == 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue