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]>
signature.asc
Description: PGP signature
