[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 09/17] hw/block/nvme: refactor aio submission
From: |
Keith Busch |
Subject: |
Re: [PATCH v2 09/17] hw/block/nvme: refactor aio submission |
Date: |
Mon, 21 Sep 2020 08:20:15 -0700 |
On Fri, Sep 18, 2020 at 10:36:13PM +0200, Klaus Jensen wrote:
> +static inline bool nvme_req_is_write(NvmeRequest *req)
> +{
> + switch (req->cmd.opcode) {
> + case NVME_CMD_WRITE:
> + case NVME_CMD_WRITE_ZEROES:
> + return true;
> + default:
> + return false;
> + }
> +}
It doesn't look like this is called for WRITE_ZEROES anywhere. It also
looks like this helper is a bit unnecessary. We can reorganize some of
the flow so that we're not checking the opcode twice:
> +static uint16_t nvme_do_aio(BlockBackend *blk, int64_t offset, size_t len,
> + NvmeRequest *req)
> +{
> + BlockAcctCookie *acct = &req->acct;
> + BlockAcctStats *stats = blk_get_stats(blk);
> +
> + bool is_write;
bool is_write = false;
> + trace_pci_nvme_do_aio(nvme_cid(req), req->cmd.opcode,
> + nvme_io_opc_str(req->cmd.opcode), blk_name(blk),
> + offset, len);
> +
> + switch (req->cmd.opcode) {
> + case NVME_CMD_FLUSH:
> + block_acct_start(stats, acct, 0, BLOCK_ACCT_FLUSH);
> + req->aiocb = blk_aio_flush(blk, nvme_rw_cb, req);
> + break;
> +
> + case NVME_CMD_WRITE_ZEROES:
> + block_acct_start(stats, acct, len, BLOCK_ACCT_WRITE);
> + req->aiocb = blk_aio_pwrite_zeroes(blk, offset, len,
> + BDRV_REQ_MAY_UNMAP, nvme_rw_cb,
> + req);
> + break;
> +
> + case NVME_CMD_READ:
> + case NVME_CMD_WRITE:
> + is_write = nvme_req_is_write(req);
case NVME_CMD_WRITE:
is_write = true; /* fallthrough */
case NVME_CMD_READ:
....
> +
> + block_acct_start(stats, acct, len,
> + is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ);
> +
> + if (req->qsg.sg) {
> + if (is_write) {
> + req->aiocb = dma_blk_write(blk, &req->qsg, offset,
> + BDRV_SECTOR_SIZE, nvme_rw_cb,
> req);
> + } else {
> + req->aiocb = dma_blk_read(blk, &req->qsg, offset,
> + BDRV_SECTOR_SIZE, nvme_rw_cb, req);
> + }
> + } else {
> + if (is_write) {
> + req->aiocb = blk_aio_pwritev(blk, offset, &req->iov, 0,
> + nvme_rw_cb, req);
> + } else {
> + req->aiocb = blk_aio_preadv(blk, offset, &req->iov, 0,
> + nvme_rw_cb, req);
> + }
> + }
> +
> + break;
> + }
> +
> + return NVME_NO_COMPLETE;
> }
- [PATCH v2 02/17] pci: pass along the return value of dma_memory_rw, (continued)
- [PATCH v2 02/17] pci: pass along the return value of dma_memory_rw, Klaus Jensen, 2020/09/18
- [PATCH v2 05/17] hw/block/nvme: alignment style fixes, Klaus Jensen, 2020/09/18
- [PATCH v2 03/17] hw/block/nvme: handle dma errors, Klaus Jensen, 2020/09/18
- [PATCH v2 06/17] hw/block/nvme: add a lba to bytes helper, Klaus Jensen, 2020/09/18
- [PATCH v2 07/17] hw/block/nvme: fix endian conversion, Klaus Jensen, 2020/09/18
- [PATCH v2 08/17] hw/block/nvme: add symbolic command name to trace events, Klaus Jensen, 2020/09/18
- [PATCH v2 09/17] hw/block/nvme: refactor aio submission, Klaus Jensen, 2020/09/18
- Re: [PATCH v2 09/17] hw/block/nvme: refactor aio submission,
Keith Busch <=
- [PATCH v2 10/17] hw/block/nvme: default request status to success, Klaus Jensen, 2020/09/18
- [PATCH v2 11/17] hw/block/nvme: harden cmb access, Klaus Jensen, 2020/09/18
- [PATCH v2 13/17] hw/block/nvme: add support for sgl bit bucket descriptor, Klaus Jensen, 2020/09/18
- [PATCH v2 12/17] hw/block/nvme: add support for scatter gather lists, Klaus Jensen, 2020/09/18
- [PATCH v2 14/17] hw/block/nvme: refactor identify active namespace id list, Klaus Jensen, 2020/09/18
- [PATCH v2 15/17] hw/block/nvme: support multiple namespaces, Klaus Jensen, 2020/09/18
- [PATCH v2 17/17] hw/block/nvme: change controller pci id, Klaus Jensen, 2020/09/18
- [PATCH v2 16/17] pci: allocate pci id for nvme, Klaus Jensen, 2020/09/18
- Re: [PATCH v2 00/17] hw/block/nvme: multiple namespaces support, Keith Busch, 2020/09/21