lib/ftl: Drop relocation for empty bands immediately
Added check if band that is added to reloc have any valid blocks. Return immediately if there is no valid blocks. Change-Id: I2bce088e0ad71479c6899fff96845397d12e2e92 Signed-off-by: Wojciech Malikowski <wojciech.malikowski@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457625 Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
c149f9597f
commit
a74b79dc74
@ -772,6 +772,13 @@ ftl_reloc_add(struct ftl_reloc *reloc, struct ftl_band *band, size_t offset,
|
|||||||
struct ftl_band_reloc *breloc = &reloc->brelocs[band->id];
|
struct ftl_band_reloc *breloc = &reloc->brelocs[band->id];
|
||||||
size_t i, prev_lbks = breloc->num_lbks;
|
size_t i, prev_lbks = breloc->num_lbks;
|
||||||
|
|
||||||
|
pthread_spin_lock(&band->lba_map.lock);
|
||||||
|
if (band->lba_map.num_vld == 0) {
|
||||||
|
pthread_spin_unlock(&band->lba_map.lock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pthread_spin_unlock(&band->lba_map.lock);
|
||||||
|
|
||||||
for (i = offset; i < offset + num_lbks; ++i) {
|
for (i = offset; i < offset + num_lbks; ++i) {
|
||||||
if (spdk_bit_array_get(breloc->reloc_map, i)) {
|
if (spdk_bit_array_get(breloc->reloc_map, i)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -301,13 +301,12 @@ test_reloc_iter_full(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_reloc_iter_empty(void)
|
test_reloc_empty_band(void)
|
||||||
{
|
{
|
||||||
struct spdk_ftl_dev *dev;
|
struct spdk_ftl_dev *dev;
|
||||||
struct ftl_reloc *reloc;
|
struct ftl_reloc *reloc;
|
||||||
struct ftl_band_reloc *breloc;
|
struct ftl_band_reloc *breloc;
|
||||||
struct ftl_band *band;
|
struct ftl_band *band;
|
||||||
struct ftl_ppa ppa;
|
|
||||||
|
|
||||||
setup_reloc(&dev, &reloc, &g_geo, &g_range);
|
setup_reloc(&dev, &reloc, &g_geo, &g_range);
|
||||||
|
|
||||||
@ -316,8 +315,6 @@ test_reloc_iter_empty(void)
|
|||||||
|
|
||||||
ftl_reloc_add(reloc, band, 0, ftl_num_band_lbks(dev), 0);
|
ftl_reloc_add(reloc, band, 0, ftl_num_band_lbks(dev), 0);
|
||||||
|
|
||||||
CU_ASSERT_EQUAL(breloc->num_lbks, ftl_num_band_lbks(dev));
|
|
||||||
CU_ASSERT_EQUAL(0, ftl_reloc_next_lbks(breloc, &ppa));
|
|
||||||
CU_ASSERT_EQUAL(breloc->num_lbks, 0);
|
CU_ASSERT_EQUAL(breloc->num_lbks, 0);
|
||||||
|
|
||||||
cleanup_reloc(dev, reloc);
|
cleanup_reloc(dev, reloc);
|
||||||
@ -481,31 +478,6 @@ test_reloc_single_lbk(void)
|
|||||||
cleanup_reloc(dev, reloc);
|
cleanup_reloc(dev, reloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
test_reloc_empty_band(void)
|
|
||||||
{
|
|
||||||
struct spdk_ftl_dev *dev;
|
|
||||||
struct ftl_reloc *reloc;
|
|
||||||
struct ftl_band_reloc *breloc;
|
|
||||||
struct ftl_band *band;
|
|
||||||
|
|
||||||
setup_reloc(&dev, &reloc, &g_geo, &g_range);
|
|
||||||
|
|
||||||
breloc = &reloc->brelocs[0];
|
|
||||||
band = breloc->band;
|
|
||||||
|
|
||||||
ftl_reloc_add(reloc, band, 0, ftl_num_band_lbks(dev), 0);
|
|
||||||
|
|
||||||
CU_ASSERT_EQUAL(breloc->num_lbks, ftl_num_band_lbks(dev));
|
|
||||||
|
|
||||||
ftl_reloc(reloc);
|
|
||||||
|
|
||||||
CU_ASSERT_EQUAL(breloc->num_lbks, 0);
|
|
||||||
SPDK_CU_ASSERT_FATAL(breloc->moves != NULL);
|
|
||||||
|
|
||||||
cleanup_reloc(dev, reloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -525,8 +497,6 @@ main(int argc, char **argv)
|
|||||||
if (
|
if (
|
||||||
CU_add_test(suite, "test_reloc_iter_full",
|
CU_add_test(suite, "test_reloc_iter_full",
|
||||||
test_reloc_iter_full) == NULL
|
test_reloc_iter_full) == NULL
|
||||||
|| CU_add_test(suite, "test_reloc_iter_empty",
|
|
||||||
test_reloc_iter_empty) == NULL
|
|
||||||
|| CU_add_test(suite, "test_reloc_empty_band",
|
|| CU_add_test(suite, "test_reloc_empty_band",
|
||||||
test_reloc_empty_band) == NULL
|
test_reloc_empty_band) == NULL
|
||||||
|| CU_add_test(suite, "test_reloc_full_band",
|
|| CU_add_test(suite, "test_reloc_full_band",
|
||||||
|
Loading…
Reference in New Issue
Block a user