kernel: mtk_bmt: fix block copying on remap with bmt v2

Copy from the previously mapped block (in case it was remapped already)

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2022-03-09 16:04:39 +01:00
parent b4c7f8c5f7
commit 7d1e2be160

View file

@ -285,21 +285,21 @@ error:
*/ */
static bool remap_block_v2(u16 block, u16 mapped_block, int copy_len) static bool remap_block_v2(u16 block, u16 mapped_block, int copy_len)
{ {
u16 mapped_blk; u16 new_block;
struct bbbt *bbt; struct bbbt *bbt;
bbt = bmtd.bbt; bbt = bmtd.bbt;
mapped_blk = find_valid_block_in_pool(bbt); new_block = find_valid_block_in_pool(bbt);
if (mapped_blk == 0) if (new_block == 0)
return false; return false;
/* Map new bad block to available block in pool */ /* Map new bad block to available block in pool */
bbt->bb_tbl[block] = mapped_blk; bbt->bb_tbl[block] = new_block;
/* Erase new block */ /* Erase new block */
bbt_nand_erase(mapped_blk); bbt_nand_erase(new_block);
if (copy_len > 0) if (copy_len > 0)
bbt_nand_copy(mapped_blk, block, copy_len); bbt_nand_copy(new_block, mapped_block, copy_len);
bmtd.bmt_blk_idx = upload_bmt(bbt, bmtd.bmt_blk_idx); bmtd.bmt_blk_idx = upload_bmt(bbt, bmtd.bmt_blk_idx);