linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Mike Christie <mchristi@redhat.com>,
	Ulf Hansson <ulf.hansson@linaro.org>, Jens Axboe <axboe@fb.com>,
	regressions@leemhuis.info
Cc: "linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>
Subject: Re: 4.8-rc1 REGRESSION mmc-blk triggers WARN_ON(!host->claimed), related to: "drivers: use req op accessor" ?
Date: Wed, 24 Aug 2016 10:47:07 +0200	[thread overview]
Message-ID: <2a2ee1e8-8682-0647-a66d-04ceb54f58ec@redhat.com> (raw)
In-Reply-To: <57BB23D0.3050606@redhat.com>

Hi,

On 22-08-16 18:09, Mike Christie wrote:
> On 08/21/2016 10:15 AM, Hans de Goede wrote:
>> Hi All,
>>
>> With 4.8-rc1 I'm seeing WARN_ON(!host->claimed) triggering in both
>> mmc_start_request() as well as in mmc_release_host(). The first
>> indicating that we're executing mmc commands without doing
>> mmc_claim_host() and the second one indicating that we're
>> releasing the host without having claimed it first.
>>
>> The backtraces all point to mmc_blk_issue_rq(). I've done
>> a very naive hack / workaround:
>>
>> --- a/drivers/mmc/card/block.c
>> +++ b/drivers/mmc/card/block.c
>> @@ -2151,9 +2151,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq,
>> struct request *req)
>>      struct mmc_host *host = card->host;
>>      unsigned long flags;
>>
>> -    if (req && !mq->mqrq_prev->req)
>> -        /* claim host only for the first request */
>> -        mmc_get_card(card);
>> +    mmc_get_card(card);
>>
>>      ret = mmc_blk_part_switch(card, md);
>>      if (ret) {
>> @@ -2190,15 +2188,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq,
>> struct request *req)
>>      }
>>
>>  out:
>> -    if ((!req && !(mq->flags & MMC_QUEUE_NEW_REQUEST)) ||
>> -        mmc_req_is_special(req))
>> -        /*
>> -         * Release host when there are no more requests
>> -         * and after special request(discard, flush) is done.
>> -         * In case sepecial request, there is no reentry to
>> -         * the 'mmc_blk_issue_rq' with 'mqrq_prev->req'.
>> -         */
>> -        mmc_put_card(card);
>> +    mmc_put_card(card);
>> +
>>      return ret;
>>  }
>>
>>
>> Which fixes this, further pointing to the somewhat magical claim / release
>> code in mmc_blk_issue_rq() being the culprit.
>>
>> Looking at recent commits these 2 stand out as possible causes of this:
>>
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c2df40dfb8c015211ec55f4b1dd0587f875c7b34
>>
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3a5e02ced11e22ecd9da3d6710afe15bcfee1d10
>>
>>
>> I've the feeling that one of these is making mmc_blk_issue_rq() not
>> claiming
>> the host while it should do so ...
>>
>
> There is a bug with those patches and the secure discard ones where when
> REQ_OP_SECURE_ERASE is sent, mmc_put_card above will not be called, and
> they will be treated as normal requests instead of special one so the
> drivers lists are not executed properly.

Actually the problem seems to be mmc_get_card not getting called while it
should at the top of mmc_blk_issue_rq, I first get a WARN_ON(!host->claimed)
triggering in mmc_start_request (so missing mmc_card_get) and then
in mmc_release_host (mmc_card_put called without mc_card_get being called
first).

> The patch in Jens's tree
> https://git.kernel.org/cgit/linux/kernel/git/axboe/linux-block.git/commit/?h=for-linus&id=7afafc8a44bf0ab841b17d450b02aedb3a138985
> fixes the issue.

I've tried 4.8-rc3 with my hack drop and this commit cherry-picked,
but the problem is still there, so this patch does not fix it.

Regards,

Hans

  reply	other threads:[~2016-08-24  8:47 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-21 15:15 4.8-rc1 REGRESSION mmc-blk triggers WARN_ON(!host->claimed), related to: "drivers: use req op accessor" ? Hans de Goede
2016-08-22 16:09 ` Mike Christie
2016-08-24  8:47   ` Hans de Goede [this message]
2016-08-25  8:19     ` Adrian Hunter
2016-08-25 14:16       ` Jens Axboe
2016-08-25 18:26       ` Hans de Goede
2016-08-25 20:12         ` Jens Axboe
2016-08-26  7:13           ` Ulf Hansson
2016-08-26  8:25             ` Mike Christie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2a2ee1e8-8682-0647-a66d-04ceb54f58ec@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=axboe@fb.com \
    --cc=linux-mmc@vger.kernel.org \
    --cc=mchristi@redhat.com \
    --cc=regressions@leemhuis.info \
    --cc=ulf.hansson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).