diff options
author | Robin van der Gracht <robin@protonic.nl> | 2015-08-04 09:58:33 +0300 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2015-08-27 15:50:47 +0300 |
commit | 22d7e85ff8e5826845e9a4fa34b4723e5a97ee9b (patch) | |
tree | 3fa82091ca4c1e538bfdeedaa8abc58d42a335a6 /drivers/mmc | |
parent | 0df9d2eae5e1092b07eaab6b989c2ff14115cab5 (diff) | |
download | linux-22d7e85ff8e5826845e9a4fa34b4723e5a97ee9b.tar.xz |
mmc: core: Fixed bug in one erase-group budget TRIM
When requesting a trim for several bytes, everything up to the next
erase-group is erased. This causes data corruption.
Signed-off-by: Robin van der Gracht <robin@protonic.nl>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/core/core.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 083cade3ffc5..57edb2a9bb04 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -2227,9 +2227,8 @@ int mmc_erase(struct mmc_card *card, unsigned int from, unsigned int nr, * and call mmc_do_erase() twice if necessary. This special case is * identified by the card->eg_boundary flag. */ - if ((arg & MMC_TRIM_ARGS) && (card->eg_boundary) && - (from % card->erase_size)) { - rem = card->erase_size - (from % card->erase_size); + rem = card->erase_size - (from % card->erase_size); + if ((arg & MMC_TRIM_ARGS) && (card->eg_boundary) && (nr > rem)) { err = mmc_do_erase(card, from, from + rem - 1, arg); from += rem; if ((err) || (to <= from)) |