Messages in this thread | | | Date | Fri, 20 Aug 2021 13:55:21 +0200 | From | Daniel Wagner <> | Subject | Re: [PATCH v5 0/3] Handle update hardware queues and queue freeze more carefully |
| |
On Fri, Aug 20, 2021 at 10:48:32AM +0200, Daniel Wagner wrote: > Then we try to do the same thing again which fails, thus we never > make progress. > > So clearly we need to update number of queues at one point. What would > be the right thing to do here? As I understood we need to be careful > with frozen requests. Can we abort them (is this even possible in this > state?) and requeue them before we update the queue numbers?
After starring a bit longer at the reset path, I think there is no pending request in any queue. nvme_fc_delete_association() calls __nvme_fc_abort_outstanding_ios() which makes sure all queues are drained (usage counter is 0). Also it clears the NVME_FC_Q_LIVE bit, which prevents further request added to queues.
I start wonder why we have to do the nvme_start_freeze() in the first place and why we want to wait for the freeze. 88e837ed0f1f ("nvme-fc: wait for queues to freeze before calling update_hr_hw_queues") doesn't really tell why we need wait for the freeze.
Given we know the usage counter of the queues is 0, I think we are safe to move the blk_mq_update_nr_hw_queues() before the start queue code. Also note nvme_fc_create_hw_io_queues() calls blk_mq_freeze_queue() but it wont block as we are sure there is no pending request.
| |