engines:nvme: fill command fields as per pi check bits
authorAnkit Kumar <ankit.kumar@samsung.com>
Mon, 11 Sep 2023 16:25:00 +0000 (21:55 +0530)
committerJens Axboe <axboe@kernel.dk>
Mon, 11 Sep 2023 16:55:56 +0000 (10:55 -0600)
Fill the application and reference tag field for read and write
command only when pi_chk has the relevant bit set.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
engines/nvme.c

index 08503b33998edeea72639d92fb35a798222f3514..75a5e0c12107113481ae8f2e54e36d49de433011 100644 (file)
@@ -415,19 +415,24 @@ void fio_nvme_pi_fill(struct nvme_uring_cmd *cmd, struct io_u *io_u,
        case NVME_NS_DPS_PI_TYPE2:
                switch (data->guard_type) {
                case NVME_NVM_NS_16B_GUARD:
-                       cmd->cdw14 = (__u32)slba;
+                       if (opts->io_flags & NVME_IO_PRINFO_PRCHK_REF)
+                               cmd->cdw14 = (__u32)slba;
                        break;
                case NVME_NVM_NS_64B_GUARD:
-                       cmd->cdw14 = (__u32)slba;
-                       cmd->cdw3 = ((slba >> 32) & 0xffff);
+                       if (opts->io_flags & NVME_IO_PRINFO_PRCHK_REF) {
+                               cmd->cdw14 = (__u32)slba;
+                               cmd->cdw3 = ((slba >> 32) & 0xffff);
+                       }
                        break;
                default:
                        break;
                }
-               cmd->cdw15 = (opts->apptag_mask << 16 | opts->apptag);
+               if (opts->io_flags & NVME_IO_PRINFO_PRCHK_APP)
+                       cmd->cdw15 = (opts->apptag_mask << 16 | opts->apptag);
                break;
        case NVME_NS_DPS_PI_TYPE3:
-               cmd->cdw15 = (opts->apptag_mask << 16 | opts->apptag);
+               if (opts->io_flags & NVME_IO_PRINFO_PRCHK_APP)
+                       cmd->cdw15 = (opts->apptag_mask << 16 | opts->apptag);
                break;
        case NVME_NS_DPS_PI_NONE:
                break;