[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/12] hw/nvme: improve cancellation handling in dsm
From: |
Klaus Jensen |
Subject: |
[PATCH 10/12] hw/nvme: improve cancellation handling in dsm |
Date: |
Thu, 23 Jun 2022 23:18:19 +0200 |
From: Klaus Jensen <k.jensen@samsung.com>
When the DSM operation is cancelled asynchronously, we set iocb->ret to
-ECANCELED. However, the callback function only checks the return value
of the completed aio, which may have completed succesfully prior to the
cancellation and thus the callback ends up continuing the dsm operation
instead of bailing out. Fix this.
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/nvme/ctrl.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 9add74753fd8..5eee730ed0cf 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -2367,16 +2367,10 @@ static void nvme_dsm_md_cb(void *opaque, int ret)
uint64_t slba;
uint32_t nlb;
- if (ret < 0) {
- iocb->ret = ret;
+ if (ret < 0 || iocb->ret < 0 || !ns->lbaf.ms) {
goto done;
}
- if (!ns->lbaf.ms) {
- nvme_dsm_cb(iocb, 0);
- return;
- }
-
range = &iocb->range[iocb->idx - 1];
slba = le64_to_cpu(range->slba);
nlb = le32_to_cpu(range->nlb);
@@ -2389,7 +2383,6 @@ static void nvme_dsm_md_cb(void *opaque, int ret)
ret = nvme_block_status_all(ns, slba, nlb, BDRV_BLOCK_ZERO);
if (ret) {
if (ret < 0) {
- iocb->ret = ret;
goto done;
}
@@ -2403,8 +2396,7 @@ static void nvme_dsm_md_cb(void *opaque, int ret)
return;
done:
- iocb->aiocb = NULL;
- qemu_bh_schedule(iocb->bh);
+ nvme_dsm_cb(iocb, ret);
}
static void nvme_dsm_cb(void *opaque, int ret)
@@ -2420,6 +2412,8 @@ static void nvme_dsm_cb(void *opaque, int ret)
if (ret < 0) {
iocb->ret = ret;
goto done;
+ } else if (iocb->ret < 0) {
+ goto done;
}
next:
--
2.36.1
- [PATCH 00/12] hw/nvme: misc fixes and updates, Klaus Jensen, 2022/06/23
- [PATCH 01/12] hw/nvme: fix incorrect use of errp/local_err, Klaus Jensen, 2022/06/23
- [PATCH 02/12] hw/nvme: remove redundant passing of PCIDevice, Klaus Jensen, 2022/06/23
- [PATCH 03/12] hw/nvme: cleanup error reporting in nvme_init_pci(), Klaus Jensen, 2022/06/23
- [PATCH 04/12] hw/nvme: fix numzrwa handling, Klaus Jensen, 2022/06/23
- [PATCH 05/12] hw/nvme: fix accidental reintroduction of redundant code, Klaus Jensen, 2022/06/23
- [PATCH 06/12] hw/nvme: fix cancellation of format operations, Klaus Jensen, 2022/06/23
- [PATCH 07/12] hw/nvme: fix flush cancel, Klaus Jensen, 2022/06/23
- [PATCH 08/12] hw/nvme: rework flush bh scheduling, Klaus Jensen, 2022/06/23
- [PATCH 09/12] hw/nvme: improve cancellation handling in zone reset, Klaus Jensen, 2022/06/23
- [PATCH 10/12] hw/nvme: improve cancellation handling in dsm,
Klaus Jensen <=
- [PATCH 11/12] hw/nvme: simplify copy command error handling, Klaus Jensen, 2022/06/23
- [PATCH 12/12] hw/nvme: align logic of format with flush, Klaus Jensen, 2022/06/23