From: Paolo Valente <paolo.valente@linaro.org>
To: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org,
Linux-Kernal <linux-kernel@vger.kernel.org>,
Ulf Hansson <ulf.hansson@linaro.org>,
Linus Walleij <linus.walleij@linaro.org>,
broonie@kernel.org
Subject: Re: [PATCH BUGFIX] block, bfq: access and cache blkg data only when safe
Date: Thu, 25 May 2017 09:10:59 +0200 [thread overview]
Message-ID: <DBB76394-B3DF-44AE-9536-8CDF270B37D5@linaro.org> (raw)
In-Reply-To: <20170524164704.GF24798@htj.duckdns.org>
> Il giorno 24 mag 2017, alle ore 17:47, Tejun Heo <tj@kernel.org> ha scritto:
>
> Hello,
>
> On Wed, May 24, 2017 at 05:43:18PM +0100, Paolo Valente wrote:
>>> so none of the above objects can be destroyed before the request is
>>> done.
>>
>> ... the issue seems just to move to a more subtle position: cfq is ok,
>> because it protects itself with rq lock, but blk-mq schedulers don't.
>> So, the race that leads to the (real) crashes reported by people may
>> actually be:
>
> Oh, I was just thinking about !mq paths the whole time.
>
>> 1 blkg_lookup executed on a blkg being destroyed: the scheduler gets a
>> copy of the content of the blkg, but the rcu mechanism doesn't prevent
>> destruction from going on
>> 2 blkg_get gets executed on the copy of the original blkg
>
> So, we can't do that. We should look up and bump the ref and use the
> original copy. We probably should switch blkgs to use percpu-refs.
>
Ok. So, just to better understand: as of now, i.e., before you make
the changes you are proposing, the address returned by blkg_lookup can
be used safely only if one both invokes blkg_lookup and gets a
reference, while holding the rq lock all the time. But then, before
the changes you propose, what is the remaining role of rcu protection
here? Are there places where the value returned by blkg_lookup is
actually used safely without getting a reference the returned blkg?
Anyway, I'm willing to help with your proposal, if you think I can be
of any help at some point. In this respect, consider that I'm not an
expert of percpu-refs either.
Finally, I guess that the general fix you have in mind may not be
ready shortly. So, I'll proceed with my temporary fix for the moment.
In particular, I will
1) fix the typo reported by Jens;
2) add a note stating that this is a temporary fix;
3) if needed, modify commit log and comments in the diffs, to better
describe the general problem, and the actual critical race.
Thanks,
Paolo
> Thanks.
>
> --
> tejun
next prev parent reply other threads:[~2017-05-25 7:11 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-19 8:39 Paolo Valente
2017-05-19 14:37 ` Jens Axboe
2017-05-22 20:20 ` Paolo Valente
2017-05-19 14:54 ` Tejun Heo
2017-05-20 7:27 ` Paolo Valente
2017-05-23 20:42 ` Tejun Heo
2017-05-24 11:53 ` Paolo Valente
2017-05-24 14:24 ` Paolo Valente
2017-05-24 14:50 ` Tejun Heo
2017-05-24 16:43 ` Paolo Valente
2017-05-24 16:47 ` Tejun Heo
2017-05-25 7:10 ` Paolo Valente [this message]
2017-05-25 14:37 ` Tejun Heo
2017-06-05 8:11 Paolo Valente
2017-06-08 15:30 ` Paolo Valente
2017-06-08 15:52 ` Jens Axboe
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=DBB76394-B3DF-44AE-9536-8CDF270B37D5@linaro.org \
--to=paolo.valente@linaro.org \
--cc=axboe@kernel.dk \
--cc=broonie@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@kernel.org \
--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
all inboxes | Powered by JetHome®