From e97148d5ddd45f56dfbdc2e9d39ee6f9ad536a3f Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 11 Sep 2019 11:15:11 +0900 Subject: [PATCH] nvme/fio_plugin: Fix the issue that DIF context is initialized only for write I/O DIF context has to be initialized both for read and write I/O. However, it had been initialized only for write I/O unintentionally after refining error processing. This patch fixes the issue. Signed-off-by: James Bergsten Signed-off-by: Changpeng Liu Signed-off-by: Shuhei Matsumoto Change-Id: I363da40ddba186e52fd0dfce37cfb0dea325040d Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468015 Tested-by: SPDK CI Jenkins Reviewed-by: James Bergsten Reviewed-by: Ben Walker --- examples/nvme/fio_plugin/fio_plugin.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/examples/nvme/fio_plugin/fio_plugin.c b/examples/nvme/fio_plugin/fio_plugin.c index 3761982e7..1278f30e0 100644 --- a/examples/nvme/fio_plugin/fio_plugin.c +++ b/examples/nvme/fio_plugin/fio_plugin.c @@ -593,6 +593,10 @@ fio_extended_lba_setup_pi(struct spdk_fio_qpair *fio_qpair, struct io_u *io_u) return rc; } + if (io_u->ddir != DDIR_WRITE) { + return 0; + } + iov.iov_base = io_u->buf; iov.iov_len = io_u->xfer_buflen; rc = spdk_dif_generate(&iov, 1, lba_count, &fio_req->dif_ctx); @@ -627,6 +631,10 @@ fio_separate_md_setup_pi(struct spdk_fio_qpair *fio_qpair, struct io_u *io_u) return rc; } + if (io_u->ddir != DDIR_WRITE) { + return 0; + } + iov.iov_base = io_u->buf; iov.iov_len = io_u->xfer_buflen; md_iov.iov_base = fio_req->md_buf; @@ -785,7 +793,7 @@ spdk_fio_queue(struct thread_data *td, struct io_u *io_u) lba_count = io_u->xfer_buflen / block_size; /* TODO: considering situations that fio will randomize and verify io_u */ - if (fio_qpair->do_nvme_pi && io_u->ddir == DDIR_WRITE) { + if (fio_qpair->do_nvme_pi) { if (fio_qpair->extended_lba) { rc = fio_extended_lba_setup_pi(fio_qpair, io_u); } else {