• Zhihao Cheng's avatar
    ubi: fastmap: Fix missed ec updating after erasing old fastmap data block · 4d18b5a5
    Zhihao Cheng authored
    After running fsstress on ubifs for a long time, UBI(16384 blocks,
    fastmap takes 2 blocks) has an erase block with different erase
    counters displayed from two views:
    
    From ubiscan view: PEB 8031 has erase counter 31581
    =========================================================
    from              to     count      min      avg      max
    ---------------------------------------------------------
    0        ..        9:        0        0        0        0
    10       ..       99:        0        0        0        0
    100      ..      999:    16383      290      315      781
    1000     ..     9999:        0        0        0        0
    10000    ..    99999:        1    31581    31581    31581
    100000   ..      inf:        0        0        0        0
    ---------------------------------------------------------
    Total               :    16384      290      317    31581
    
    From detailed_erase_block_info view: PEB 8031 has erase counter 7
    physical_block_number   erase_count
    8030                    421
    8031                    7   # mem info is different from disk info
    8032                    434
    8033                    425
    8034                    431
    
    Following process missed updating erase counter in wl_entry(in memory):
    ubi_update_fastmap
     for (i = 1; i < new_fm->used_blocks; i++) // update fastmap data
      if (!tmp_e)
       if (old_fm && old_fm->e[i])
        erase_block(ubi, old_fm->e[i]->pnum)
         ret = ubi_io_sync_erase(ubi, pnum, 0)
         ec = be64_to_cpu(ec_hdr->ec)
         ec += ret
         ec_hdr->ec = cpu_to_be64(ec)
         ubi_io_write_ec_hdr(ubi, pnum, ec_hdr)  // ec is updated on flash
       // ec is not updated in old_fm->e[i] (in memory)
    
    Fix it by passing wl_enter into erase_block() and updating erase
    counter in erase_block().
    
    Fixes: dbb7d2a8
    
     ("UBI: Add fastmap core")
    Signed-off-by: default avatarZhihao Cheng <chengzhihao1@huawei.com>
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    4d18b5a5
fastmap.c 40.5 KB