Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752220AbbFAKjQ (ORCPT ); Mon, 1 Jun 2015 06:39:16 -0400 Received: from mga11.intel.com ([192.55.52.93]:60755 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750820AbbFAKjH (ORCPT ); Mon, 1 Jun 2015 06:39:07 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,532,1427785200"; d="scan'208";a="500902811" Message-ID: <556C35BD.4050809@intel.com> Date: Mon, 01 Jun 2015 13:36:45 +0300 From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: David Jander , Ulf Hansson , Sascha Hauer CC: Johan Rudholm , Javier Martinez Canillas , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] mmc: core: Fix off-by-one error in mmc_do_calc_max_discard() References: <1433150435-19997-1-git-send-email-david@protonic.nl> In-Reply-To: <1433150435-19997-1-git-send-email-david@protonic.nl> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1469 Lines: 45 On 01/06/15 12:20, David Jander wrote: > qty is the maximum number of discard that _do_ fit in the timeout, not > the first amount that does _not_ fit anymore. > This seemingly harmless error has a very severe performance impact when > the timeout value is enough for only 1 erase group. > > Signed-off-by: David Jander > --- > drivers/mmc/core/core.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 92e7671..1f9573b 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -2234,16 +2234,13 @@ static unsigned int mmc_do_calc_max_discard(struct mmc_card *card, > if (!qty) > return 0; > > - if (qty == 1) > - return 1; > - > /* Convert qty to sectors */ > if (card->erase_shift) > - max_discard = --qty << card->erase_shift; > + max_discard = qty << card->erase_shift; > else if (mmc_card_sd(card)) > max_discard = qty; > else > - max_discard = --qty * card->erase_size; > + max_discard = qty * card->erase_size; > > return max_discard; > } > This keeps coming up but there is more to it than that. See here: http://marc.info/?l=linux-mmc&m=142504164427546 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/