|
|
@ -264,6 +264,9 @@ static uint32_t find_last_group(struct ftl_map *map, uint32_t block) |
|
|
|
uint32_t ngroups = UINT32_C(1) << map->log2_groups_per_block; |
|
|
|
uint32_t ngroups = UINT32_C(1) << map->log2_groups_per_block; |
|
|
|
uint32_t mid, low = 0, high = ngroups - 1; |
|
|
|
uint32_t mid, low = 0, high = ngroups - 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
low += block << map->log2_groups_per_block; |
|
|
|
|
|
|
|
high += block << map->log2_groups_per_block; |
|
|
|
|
|
|
|
|
|
|
|
while (low <= high) { |
|
|
|
while (low <= high) { |
|
|
|
mid = (low + high) / 2; |
|
|
|
mid = (low + high) / 2; |
|
|
|
|
|
|
|
|
|
|
@ -272,9 +275,8 @@ static uint32_t find_last_group(struct ftl_map *map, uint32_t block) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (((mid + 1) >= ngroups) || |
|
|
|
if (is_group_erased(map, mid + 1)) |
|
|
|
is_group_erased(map, mid + 1)) |
|
|
|
return mid; |
|
|
|
return (block << map->log2_groups_per_block) + mid; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
low = mid + 1; |
|
|
|
low = mid + 1; |
|
|
|
} |
|
|
|
} |
|
|
|