|
|
|
@ -28,8 +28,7 @@ size_t ftl_read(struct ftl_map *map, void *data, size_t len, uint32_t va) |
|
|
|
|
if (!data) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
mask = ((1 << map->log2_page_size) - 1); |
|
|
|
|
offset = va & mask; |
|
|
|
|
offset = va & ((1 << map->log2_page_size) - 1); |
|
|
|
|
va >>= map->log2_page_size; |
|
|
|
|
len = min(len, (1 << map->log2_page_size) - offset); |
|
|
|
|
|
|
|
|
@ -48,14 +47,12 @@ size_t ftl_write(struct ftl_map *map, uint32_t va, const void *udata, |
|
|
|
|
char data[1 << map->log2_page_size]; |
|
|
|
|
struct ftl_page_desc page_desc; |
|
|
|
|
int ret; |
|
|
|
|
uint32_t mask, offset, page; |
|
|
|
|
uint32_t offset, page; |
|
|
|
|
|
|
|
|
|
if (va >= ftl_get_capacity(map) && |
|
|
|
|
!is_aligned(va, 1 << map->log2_page_size)) |
|
|
|
|
if (va >= ftl_get_capacity(map)) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
mask = ((1 << map->log2_page_size) - 1); |
|
|
|
|
offset = va & mask; |
|
|
|
|
offset = va & ((1 << map->log2_page_size) - 1); |
|
|
|
|
va >>= map->log2_page_size; |
|
|
|
|
|
|
|
|
|
if ((ret = trace_path(map, &page_desc, &page, va)) < 0 && |
|
|
|
|