[PATCH v5 2/2] nvme: use blk_mq_[un]quiesce_tagset
Chao Leng
lengchao at huawei.com
Mon Jul 27 23:21:19 EDT 2020
On 2020/7/28 8:54, Sagi Grimberg wrote:
>
>
> On 7/27/20 4:10 PM, Sagi Grimberg wrote:
>> All controller namespaces share the same tagset, so we
>> can use this interface which does the optimal operation
>> for parallel quiesce based on the tagset type (e.g.
>> blocking tagsets and non-blocking tagsets).
>>
>> Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
>> ---
>> drivers/nvme/host/core.c | 14 ++------------
>> 1 file changed, 2 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
>> index 05aa568a60af..c41df20996d7 100644
>> --- a/drivers/nvme/host/core.c
>> +++ b/drivers/nvme/host/core.c
>> @@ -4557,23 +4557,13 @@ EXPORT_SYMBOL_GPL(nvme_start_freeze);
>> void nvme_stop_queues(struct nvme_ctrl *ctrl)
>> {
>> - struct nvme_ns *ns;
>> -
>> - down_read(&ctrl->namespaces_rwsem);
>> - list_for_each_entry(ns, &ctrl->namespaces, list)
>> - blk_mq_quiesce_queue(ns->queue);
>> - up_read(&ctrl->namespaces_rwsem);
>> + blk_mq_quiesce_tagset(ctrl->tagset);
>
> Rrr.. this one is slightly annoying. We have the connect_q in
> fabrics that we use to issue the connect command which is now
> quiesced too...
>
> If we will use this interface, we can unquiesce it right away,
> but that seems kinda backwards..Io queue and admin queue has different treat mechanism, introduce
blk_mq_quiesce_tagset may make the mechanism unclear. So this is
probably not a good choice.
>
> --
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 05aa568a60af..70af0ff63e7f 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -4557,23 +4557,15 @@ EXPORT_SYMBOL_GPL(nvme_start_freeze);
>
> void nvme_stop_queues(struct nvme_ctrl *ctrl)
> {
> - struct nvme_ns *ns;
> -
> - down_read(&ctrl->namespaces_rwsem);
> - list_for_each_entry(ns, &ctrl->namespaces, list)
> - blk_mq_quiesce_queue(ns->queue);
> - up_read(&ctrl->namespaces_rwsem);
> + blk_mq_quiesce_tagset(ctrl->tagset);
> + if (ctrl->connect_q)
> + blk_mq_unquiesce_queue(ctrl->connect_q);
> }
> EXPORT_SYMBOL_GPL(nvme_stop_queues);
> --
>
> Thoughts?
> .
More information about the Linux-nvme
mailing list