Messages in this thread | | | Subject | Re: [PATCH v3] mtd:fix cache_state to avoid writing to bad blocks repeatedly | From | Xiaoming Ni <> | Date | Mon, 30 Mar 2020 22:25:36 +0800 |
| |
On 2020/3/30 21:52, Miquel Raynal wrote: > Hi Xiaoming, > > Xiaoming Ni <nixiaoming@huawei.com> wrote on Mon, 30 Mar 2020 21:45:25 > +0800: > >> The function call process is as follows: >> mtd_blktrans_work() >> while (1) >> do_blktrans_request() >> mtdblock_writesect() >> do_cached_write() >> write_cached_data() /*if cache_state is STATE_DIRTY*/ >> erase_write() >> >> write_cached_data() returns failure without modifying cache_state >> and cache_offset. So when do_cached_write() is called again, >> write_cached_data() will be called again to perform erase_write() >> on the same cache_offset. >> >> But if this cache_offset points to a bad block, erase_write() will >> always return -EIO. Writing to this mtdblk is equivalent to losing >> the current data, and repeatedly writing to the bad block. >> >> Repeatedly writing a bad block has no real benefits, >> but brings some negative effects: >> 1 Lost subsequent data >> 2 Loss of flash device life >> 3 erase_write() bad blocks are very time-consuming. For example: >> the function do_erase_oneblock() in chips/cfi_cmdset_0020.c or >> chips/cfi_cmdset_0002.c may take more than 20 seconds to return >> >> Therefore, when erase_write() returns -EIO in write_cached_data(), >> clear cache_state to avoid writing to bad blocks repeatedly. >> >> Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com> >> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> >> Cc: stable@vger.kernel.org > > Still missing: > * Fixes: tag > * Wrong title prefix >
Fixes: 1da177e4c3f41524e88 "Linux-2.6.12-rc2"
Is it described like this?
Do I need to go to https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git to trace back the older commit records?
Thanks Xiaoming Ni
| |