On Jul 29 19:34, Minwoo Im wrote:
> nvme_del_sq() asserted r->aiocb was always set when canceling a
> queue's inflight requests. A pending Async Event Request has no
> aiocb (nvme_aer() parks it without issuing any block I/O), so
> deleting a queue with an outstanding AER trips the assert instead of
> just dropping the request.
> 
> Signed-off-by: Minwoo Im <[email protected]>
> ---
>  hw/nvme/ctrl.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
> index a67e1598891c..e715de8247d1 100644
> --- a/hw/nvme/ctrl.c
> +++ b/hw/nvme/ctrl.c
> @@ -4858,12 +4858,14 @@ 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);
> -        assert(r->aiocb);
>          r->status = NVME_CMD_ABORT_SQ_DEL;
> -        blk_aio_cancel(r->aiocb);
> -    }
>  
> -    assert(QTAILQ_EMPTY(&sq->out_req_list));
> +        if (r->aiocb) {
> +            blk_aio_cancel(r->aiocb);
> +        } else {
> +            QTAILQ_REMOVE(&sq->out_req_list, r, entry);
> +        }
> +    }
>  
>      if (!nvme_check_cqid(n, sq->cqid)) {
>          cq = n->cq[sq->cqid];
> -- 
> 2.34.1
> 
> 

Thanks,

Reviewed-by: Klaus Jensen <[email protected]>

Attachment: signature.asc
Description: PGP signature

Reply via email to