nvme-fc: Question about __nvme_fc_abort_outstanding_ios()
From: Mohamed Khalfella
Date: Wed Jan 08 2025 - 20:32:19 EST
Hello,
I was looking at this code and I had a question about it.
drivers/nvme/host/fc.c
2473 static void
2474 __nvme_fc_abort_outstanding_ios(struct nvme_fc_ctrl *ctrl, bool start_queues)
2475 {
...
...
2503 blk_mq_tagset_busy_iter(&ctrl->tag_set,
2504 nvme_fc_terminate_exchange, &ctrl->ctrl);
2505 blk_mq_tagset_wait_completed_request(&ctrl->tag_set);
nvme_fc_terminate_exchange() calls __nvme_fc_abort_op() to abort all active
ops with status FCPOP_STATE_ACTIVE. I think these active ops map to in-flight
requests MQ_RQ_IN_FLIGHT. After blk_mq_tagset_busy_iter() returns it is not
guaranteed that all ops had done callback functions called on them. Some
of these requests might still be in-flight.
blk_mq_tagset_wait_completed_request() makes sure that we do not have pending
completed requests, but it does not check for in-flight requests?
Am I missing something obvious here?
Why we need blk_mq_tagset_wait_completed_request() here?
Is it possible to have in-flight requests after the function returns?
Should this call be moved to nvme_fc_delete_association() after all the
requests are aborted by LLDD?
Thanks,
Mohamed Khalfella