+14
−19
Loading
Originally we processed pending qpair events such as pending send/read/write/buffer queues when we reaped a CQE for a given qpair. Then we found an issue related to the pending buffers handling - an IO request could be waiting for a buffer and it didn't get any CQE, we fixed it by handling pending_buf_queue on idle CQ polling. Last issue (3646) revealed that qpair can have requests in pending send queue (sending responses) and no further CQEs are expected for the given qpair, that leads to a stuck. To fix both issues and prevent any futher related issues, it was decided to process all pending event on every poll iteration. Idle qpairs (with queue depth 0) are skipped to avoid unnecessary checks. This patch also changes how we process new requests - previously we put a new req to the head of incoming queue and immediately after that called qpair_process_pending which pick up the request. Now we can reap several requests before calling qpair_process_pending and to keep all requests in order we should put a request to the tail of the list. First fix for #3646 Change-Id: If92bab6e575b8e6a4c113bf281652f3a26b0c209 Signed-off-by:Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26247 Reviewed-by:
Konrad Sztyber <ksztyber@nvidia.com> Community-CI: Mellanox Build Bot Tested-by:
SPDK Automated Test System <spdkbot@gmail.com> Reviewed-by:
Jim Harris <jim.harris@nvidia.com>