Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755284AbdIGMGy (ORCPT ); Thu, 7 Sep 2017 08:06:54 -0400 Received: from mail-it0-f45.google.com ([209.85.214.45]:37149 "EHLO mail-it0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754964AbdIGMGx (ORCPT ); Thu, 7 Sep 2017 08:06:53 -0400 X-Google-Smtp-Source: ADKCNb6DE3axb2+eK3HVcUcto2DSHONPqWbd2OZdj5NqOD0fMd9VA0VcKdAhgxlVnqLi6ekvZUewvjzqxTonJ1TILrM= MIME-Version: 1.0 In-Reply-To: References: <20170905194739.GA31241@amd> <8f0f7310-ea4d-a200-75fd-23509947fb38@rock-chips.com> <6689241f-a4d8-7a3e-9f0b-482b034e5710@intel.com> From: Ulf Hansson Date: Thu, 7 Sep 2017 14:06:52 +0200 Message-ID: Subject: Re: 4.13 on thinkpad x220: oops when writing to SD card To: Adrian Hunter Cc: Shawn Lin , Pavel Machek , "linux-mmc@vger.kernel.org" , kernel list , Seraphime Kirkovski , Linus Walleij Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1851 Lines: 51 [...] > > From: Adrian Hunter > Date: Thu, 7 Sep 2017 10:40:35 +0300 > Subject: [PATCH] mmc: block: Fix incorrectly initialized requests > > mmc_init_request() depends on card->bouncesz so it must be calculated > before blk_init_allocated_queue() starts allocating requests. > > Reported-by: Seraphime Kirkovski > Fixes: 304419d8a7e92 ("mmc: core: Allocate per-request data using the block layer core") > Signed-off-by: Adrian Hunter Thanks, applied for fixes! Kind regards Uffe > --- > drivers/mmc/core/queue.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c > index affa7370ba82..74c663b1c0a7 100644 > --- a/drivers/mmc/core/queue.c > +++ b/drivers/mmc/core/queue.c > @@ -242,6 +242,12 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, > if (mmc_dev(host)->dma_mask && *mmc_dev(host)->dma_mask) > limit = (u64)dma_max_pfn(mmc_dev(host)) << PAGE_SHIFT; > > + /* > + * mmc_init_request() depends on card->bouncesz so it must be calculated > + * before blk_init_allocated_queue() starts allocating requests. > + */ > + card->bouncesz = mmc_queue_calc_bouncesz(host); > + > mq->card = card; > mq->queue = blk_alloc_queue(GFP_KERNEL); > if (!mq->queue) > @@ -265,7 +271,6 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, > if (mmc_can_erase(card)) > mmc_queue_setup_discard(mq->queue, card); > > - card->bouncesz = mmc_queue_calc_bouncesz(host); > if (card->bouncesz) { > blk_queue_max_hw_sectors(mq->queue, card->bouncesz / 512); > blk_queue_max_segments(mq->queue, card->bouncesz / 512); > -- > 1.9.1 >