diff --git a/include/ftl.h b/include/ftl.h index 2157236..f31ba7e 100644 --- a/include/ftl.h +++ b/include/ftl.h @@ -30,6 +30,7 @@ struct ftl_map { int ftl_init_map(struct ftl_map *map, struct flash_dev *dev); int ftl_resume_map(struct ftl_map *map); +int ftl_is_mapped(struct ftl_map *map, uint32_t va); size_t ftl_write(struct ftl_map *map, uint32_t addr, const void *data, size_t len); size_t ftl_read(struct ftl_map *map, void *data, size_t len, uint32_t va); diff --git a/source/ftl/ftl.c b/source/ftl/ftl.c index c40d20f..8a72ac8 100644 --- a/source/ftl/ftl.c +++ b/source/ftl/ftl.c @@ -12,6 +12,16 @@ #include "gc.h" #include "map.h" +int ftl_is_mapped(struct ftl_map *map, uint32_t va) +{ + va = align(va, map->log2_page_size); + + if (trace_path(map, NULL, NULL, va) < 0) + return 0; + + return 1; +} + size_t ftl_read(struct ftl_map *map, void *data, size_t len, uint32_t va) { int ret;