From: Gollu Appalanaidu Date: Fri, 16 Apr 2021 07:22:33 +0000 (+0530) Subject: hw/block/nvme: consider metadata read aio return value in compare X-Git-Tag: v6.1.0-rc0~117^2~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b4a983239343efd0a2d8a6cdf0690d0d707ec4ea;p=thirdparty%2Fqemu.git hw/block/nvme: consider metadata read aio return value in compare Currently in compare command metadata aio read blk_aio_preadv return value ignored. Consider it and complete the block accounting. Signed-off-by: Gollu Appalanaidu Fixes: 0a384f923f51 ("hw/block/nvme: add compare command") Signed-off-by: Klaus Jensen --- diff --git a/hw/block/nvme.c b/hw/block/nvme.c index cd594280a7f..67abc9eb2c2 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -2369,10 +2369,19 @@ static void nvme_compare_mdata_cb(void *opaque, int ret) uint32_t reftag = le32_to_cpu(rw->reftag); struct nvme_compare_ctx *ctx = req->opaque; g_autofree uint8_t *buf = NULL; + BlockBackend *blk = ns->blkconf.blk; + BlockAcctCookie *acct = &req->acct; + BlockAcctStats *stats = blk_get_stats(blk); uint16_t status = NVME_SUCCESS; trace_pci_nvme_compare_mdata_cb(nvme_cid(req)); + if (ret) { + block_acct_failed(stats, acct); + nvme_aio_err(req, ret); + goto out; + } + buf = g_malloc(ctx->mdata.iov.size); status = nvme_bounce_mdata(n, buf, ctx->mdata.iov.size, @@ -2421,6 +2430,8 @@ static void nvme_compare_mdata_cb(void *opaque, int ret) goto out; } + block_acct_done(stats, acct); + out: qemu_iovec_destroy(&ctx->data.iov); g_free(ctx->data.bounce);