[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 11/11] Partially revert "hw/block/nvme: drain namespaces o
From: |
Keith Busch |
Subject: |
Re: [PATCH v2 11/11] Partially revert "hw/block/nvme: drain namespaces on sq deletion" |
Date: |
Mon, 28 Jun 2021 09:00:59 -0700 |
On Thu, Jun 17, 2021 at 09:06:57PM +0200, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
>
> This partially reverts commit 98f84f5a4eca5c03e32fff20f246d9b4b96d6422.
>
> Since all "multi aio" commands are now reimplemented to properly track
> the nested aiocbs, we can revert the "hack" that was introduced to make
> sure all requests we're properly drained upon sq deletion.
>
> The revert is partial since we keep the assert that no outstanding
> requests remain on the submission queue after the explicit cancellation.
>
> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> ---
> hw/nvme/ctrl.c | 19 ++-----------------
> 1 file changed, 2 insertions(+), 17 deletions(-)
>
> diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
> index ec8ddb76cd39..5a1d25265a9d 100644
> --- a/hw/nvme/ctrl.c
> +++ b/hw/nvme/ctrl.c
> @@ -3918,7 +3918,6 @@ static uint16_t nvme_del_sq(NvmeCtrl *n, NvmeRequest
> *req)
> NvmeSQueue *sq;
> NvmeCQueue *cq;
> uint16_t qid = le16_to_cpu(c->qid);
> - uint32_t nsid;
>
> if (unlikely(!qid || nvme_check_sqid(n, qid))) {
> trace_pci_nvme_err_invalid_del_sq(qid);
> @@ -3930,22 +3929,8 @@ static uint16_t nvme_del_sq(NvmeCtrl *n, NvmeRequest
> *req)
> sq = n->sq[qid];
> while (!QTAILQ_EMPTY(&sq->out_req_list)) {
> r = QTAILQ_FIRST(&sq->out_req_list);
> - if (r->aiocb) {
> - blk_aio_cancel(r->aiocb);
> - }
> - }
> -
> - /*
> - * Drain all namespaces if there are still outstanding requests that we
> - * could not cancel explicitly.
> - */
> - if (!QTAILQ_EMPTY(&sq->out_req_list)) {
Quick question: was this 'if' ever even possible to hit? The preceding
'while' loop doesn't break out until the queue is empty, so this should
have been unreachable.
> - for (nsid = 1; nsid <= NVME_MAX_NAMESPACES; nsid++) {
> - NvmeNamespace *ns = nvme_ns(n, nsid);
> - if (ns) {
> - nvme_ns_drain(ns);
> - }
> - }
> + assert(r->aiocb);
> + blk_aio_cancel(r->aiocb);
> }
>
> assert(QTAILQ_EMPTY(&sq->out_req_list));
> --
- [PATCH v2 02/11] hw/nvme: add nvme_block_status_all helper, (continued)
- [PATCH v2 02/11] hw/nvme: add nvme_block_status_all helper, Klaus Jensen, 2021/06/17
- [PATCH v2 03/11] hw/nvme: reimplement dsm to allow cancellation, Klaus Jensen, 2021/06/17
- [PATCH v2 04/11] hw/nvme: save reftag when generating pi, Klaus Jensen, 2021/06/17
- [PATCH v2 05/11] hw/nvme: remove assert from nvme_get_zone_by_slba, Klaus Jensen, 2021/06/17
- [PATCH v2 06/11] hw/nvme: use prinfo directly in nvme_check_prinfo and nvme_dif_check, Klaus Jensen, 2021/06/17
- [PATCH v2 07/11] hw/nvme: add dw0/1 to the req completion trace event, Klaus Jensen, 2021/06/17
- [PATCH v2 08/11] hw/nvme: reimplement the copy command to allow aio cancellation, Klaus Jensen, 2021/06/17
- [PATCH v2 09/11] hw/nvme: reimplement zone reset to allow cancellation, Klaus Jensen, 2021/06/17
- [PATCH v2 10/11] hw/nvme: reimplement format nvm to allow cancellation, Klaus Jensen, 2021/06/17
- [PATCH v2 11/11] Partially revert "hw/block/nvme: drain namespaces on sq deletion", Klaus Jensen, 2021/06/17
- Re: [PATCH v2 11/11] Partially revert "hw/block/nvme: drain namespaces on sq deletion",
Keith Busch <=
- Re: [PATCH v2 00/11] hw/nvme: reimplement all multi-aio commands with custom aiocbs, Keith Busch, 2021/06/25
- Re: [PATCH v2 00/11] hw/nvme: reimplement all multi-aio commands with custom aiocbs, Klaus Jensen, 2021/06/28