On 2020/9/30 08:07, Vicente Bergas wrote: > On Monday, September 28, 2020 7:02:00 AM CEST, Coly Li wrote: >> On 2020/9/28 11:15, Coly Li wrote: >>> On 2020/9/28 04:29, Vicente Bergas wrote: >>>> Hi, >>>> since recently the rk3399-gru-kevin is reporting the trace below. >>>> The issue has been uncovered by >>>> b35fd7422c2f8e04496f5a770bd4e1a205414b3f >>>> block: check queue's limits.discard_granularity in ... >>> >>> Hi Vicente, >>> >>> Thanks for the information. It seems the device with f2fs declares to >>> support DISCARD but don't initialize discard_granularity for its queue. >>> >>> Can I know which block driver is under f2fs ? > > Hi Coly, yes, i confirm it is the mmc driver. Let's wait for MMC developers to response firstly. Thanks. Coly Li > >> Maybe it is the mmc driver. A zero value discard_granularity is from the >> following commit: >> >> commit e056a1b5b67b4e4bfad00bf143ab14f634777705 >> Author: Adrian Hunter <adrian.hunter@xxxxxxxxx> >> Date: Tue Jun 28 17:16:02 2011 +0300 >> >> mmc: queue: let host controllers specify maximum discard timeout >> >> Some host controllers will not operate without a hardware >> timeout that is limited in value. However large discards >> require large timeouts, so there needs to be a way to >> specify the maximum discard size. >> >> A host controller driver may now specify the maximum discard >> timeout possible so that max_discard_sectors can be calculated. >> >> However, for eMMC when the High Capacity Erase Group Size >> is not in use, the timeout calculation depends on clock >> rate which may change. For that case Preferred Erase Size >> is used instead. >> >> Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> >> Signed-off-by: Chris Ball <cjb@xxxxxxxxxx> >> >> >> Hi Adrian and Chris, >> >> I am not familiar with mmc driver, therefore I won't provide a quick fix >> like this (which might probably wrong), >> --- a/drivers/mmc/core/queue.c >> +++ b/drivers/mmc/core/queue.c >> @@ -190,7 +190,7 @@ static void mmc_queue_setup_discard(struct >> request_queue *q, >> q->limits.discard_granularity = card->pref_erase << 9; >> /* granularity must not be greater than max. discard */ >> if (card->pref_erase > max_discard) >> - q->limits.discard_granularity = 0; >> + q->limits.discard_granularity = SECTOR_SIZE; >> if (mmc_can_secure_erase_trim(card)) >> blk_queue_flag_set(QUEUE_FLAG_SECERASE, q); >> } >> >> >> It is improper for a device driver to declare to support DISCARD but set >> queue's discard_granularity as 0. >> >> Could you please to take a look for mmc_queue_setup_discard() ? >> >> Thanks in advance. >> >> Coly Li