summaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/sdio.c
diff options
context:
space:
mode:
authorMariusz Tkaczyk <mariusz.tkaczyk@intel.com>2019-06-13 16:11:41 +0200
committerSong Liu <songliubraving@fb.com>2019-06-18 08:02:25 -0700
commit9642fa73d073527b0cbc337cc17a47d545d82cd2 (patch)
treecd0bd2bc929fd1ac51b4cde63037c2ff0f9c3a7b /drivers/mmc/core/sdio.c
parent4569180495600ac59f5cd27f67242a6cb51254f3 (diff)
downloadlinux-9642fa73d073527b0cbc337cc17a47d545d82cd2.tar.bz2
md: fix for divide error in status_resync
Stopping external metadata arrays during resync/recovery causes retries, loop of interrupting and starting reconstruction, until it hit at good moment to stop completely. While these retries curr_mark_cnt can be small- especially on HDD drives, so subtraction result can be smaller than 0. However it is casted to uint without checking. As a result of it the status bar in /proc/mdstat while stopping is strange (it jumps between 0% and 99%). The real problem occurs here after commit 72deb455b5ec ("block: remove CONFIG_LBDAF"). Sector_div() macro has been changed, now the divisor is casted to uint32. For db = -8 the divisior(db/32-1) becomes 0. Check if db value can be really counted and replace these macro by div64_u64() inline. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com> Signed-off-by: Song Liu <songliubraving@fb.com>
Diffstat (limited to 'drivers/mmc/core/sdio.c')
0 files changed, 0 insertions, 0 deletions