diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c index dfc47a444b90..4744bf94ad9a 100644 --- a/drivers/mtd/sm_ftl.c +++ b/drivers/mtd/sm_ftl.c @@ -774,8 +774,11 @@ static int sm_init_zone(struct sm_ftl *ftl, int zone_num) continue; /* Read the oob of first sector */ - if (sm_read_sector(ftl, zone_num, block, 0, NULL, &oob)) + if (sm_read_sector(ftl, zone_num, block, 0, NULL, &oob)) { + kfifo_free(&zone->free_sectors); + kfree(zone->lba_to_phys_table); return -EIO; + } /* Test to see if block is erased. It is enough to test first sector, because erase happens in one shot */