From: John Garry <john.garry@huawei.com>
To: Bart Van Assche <bvanassche@acm.org>, <axboe@kernel.dk>,
<ming.lei@redhat.com>
Cc: <linux-block@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<hch@lst.de>, <hare@suse.de>, <ppvk@codeaurora.org>,
<kashyap.desai@broadcom.com>, <linuxarm@huawei.com>
Subject: Re: [RFC PATCH v2 2/2] blk-mq: Lockout tagset iter when freeing rqs
Date: Wed, 23 Dec 2020 11:10:33 +0000 [thread overview]
Message-ID: <7bdd562d-b258-43a2-0de0-966091086cff@huawei.com> (raw)
In-Reply-To: <33e41110-b3b2-ac16-f131-de1679ce8238@acm.org>
On 22/12/2020 16:16, Bart Van Assche wrote:
> On 12/22/20 3:15 AM, John Garry wrote:
>> So then we could have something like this:
>>
>> ---8<---
>>
>> -435,9 +444,13 @@ void blk_mq_queue_tag_busy_iter(struct
>> request_queue *q, busy_iter_fn *fn,
>> if (!blk_mq_hw_queue_mapped(hctx))
>> continue;
>>
>> + while (!atomic_inc_not_zero(&tags->iter_usage_counter));
>> +
>> if (tags->nr_reserved_tags)
>> bt_for_each(hctx, tags->breserved_tags, fn, priv, true);
>> bt_for_each(hctx, tags->bitmap_tags, fn, priv, false);
>>
>> + atomic_dec(&tags->iter_usage_counter);
>> }
>>
>> blk_queue_exit(q);
>>
>> --->8---
>>
>> And similar for blk_mq_tagset_busy_iter(). How about it?
>
Hi Bart,
> Are there any blk_mq_tagset_busy_iter() calls that happen from a context
> where the tag set can disappear while that function is in progress?
>
So isn't the blk_mq_tag_set always a member of the host driver data for
those cases, and, since blk_mq_tagset_busy_iter() is for iter'ing block
driver tags and called from block driver or hctx_busy_show(), it would
exist for the lifetime of the host device.
> Some blk_mq_tagset_busy_iter() calls happen from a context where it is
> not allowed to sleep but also where it is guaranteed that the tag set
> won't disappear, e.g. the call from inside sdk_mq_queue_rq().
You're talking about skd_mq_queue_rq() -> skd_in_flight() ->
blk_mq_tagset_busy_iter(), right?
So I would expect any .queue_rq calls to complete before the associated
request queue and tagset may be unregistered.
>
> How about using a mutex inside blk_mq_queue_tag_busy_iter() instead? As
> far as I can see all blk_mq_queue_tag_busy_iter() happen from a context
> where it is allowed to sleep.
Well then it seems sensible to add might_sleep() also.
And we still have the blk_mq_queue_tag_busy_iter() problem. As Ming
mentioned yesterday, we know contexts where from where it is called
which may not sleep.
Thanks,
John
next prev parent reply other threads:[~2020-12-23 11:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-17 11:07 [RFC PATCH v2 0/2] blk-mq: Avoid use-after-free for accessing old requests John Garry
2020-12-17 11:07 ` [RFC PATCH v2 1/2] blk-mq: Clean up references to old requests when freeing rqs John Garry
2020-12-17 11:07 ` [RFC PATCH v2 2/2] blk-mq: Lockout tagset iter " John Garry
2020-12-18 1:55 ` Bart Van Assche
2020-12-18 9:30 ` John Garry
2020-12-18 3:31 ` Ming Lei
2020-12-18 10:01 ` John Garry
2020-12-18 22:43 ` Bart Van Assche
2020-12-21 12:06 ` John Garry
2020-12-21 18:09 ` Bart Van Assche
2020-12-21 18:47 ` John Garry
2020-12-22 2:13 ` Bart Van Assche
2020-12-22 11:15 ` John Garry
2020-12-22 16:16 ` Bart Van Assche
2020-12-23 11:10 ` John Garry [this message]
2020-12-23 11:40 ` John Garry
2020-12-23 15:47 ` Bart Van Assche
2021-01-04 15:33 ` John Garry
2021-01-04 17:22 ` Bart Van Assche
2021-01-04 18:43 ` John Garry
[not found] ` <760304b3-dcbc-5b9d-0c70-627b7ff5b4eb@huawei.com>
2021-02-10 14:39 ` John Garry
2020-12-22 11:22 ` John Garry
2020-12-22 13:24 ` Ming Lei
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=7bdd562d-b258-43a2-0de0-966091086cff@huawei.com \
--to=john.garry@huawei.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=kashyap.desai@broadcom.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=ming.lei@redhat.com \
--cc=ppvk@codeaurora.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®