Skip to content

Commit fd01054

Browse files
ikegami-tigaw
authored andcommitted
nvme: rework nvme_io command
libnvme changed the API for the nvme_io command. Update the callsite accordingly. Signed-off-by: Tokunori Ikegami <[email protected]>
1 parent 0e2f2ba commit fd01054

1 file changed

Lines changed: 52 additions & 81 deletions

File tree

nvme.c

Lines changed: 52 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -7023,6 +7023,7 @@ static int write_uncor(int argc, char **argv, struct command *acmd, struct plugi
70237023

70247024
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
70257025
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
7026+
struct nvme_passthru_cmd cmd;
70267027
int err;
70277028

70287029
struct config {
@@ -7065,17 +7066,9 @@ static int write_uncor(int argc, char **argv, struct command *acmd, struct plugi
70657066
return -EINVAL;
70667067
}
70677068

7068-
struct nvme_io_args args = {
7069-
.args_size = sizeof(args),
7070-
.nsid = cfg.namespace_id,
7071-
.slba = cfg.start_block,
7072-
.nlb = cfg.block_count,
7073-
.control = cfg.dtype << 4,
7074-
.dspec = cfg.dspec,
7075-
.timeout = nvme_cfg.timeout,
7076-
.result = NULL,
7077-
};
7078-
err = nvme_write_uncorrectable(hdl, &args);
7069+
nvme_init_write_uncorrectable(&cmd, cfg.namespace_id, cfg.start_block,
7070+
cfg.block_count, cfg.dtype << 4, cfg.dspec);
7071+
err = nvme_submit_admin_passthru(hdl, &cmd, NULL);
70797072
if (err < 0)
70807073
nvme_show_error("write uncorrectable: %s", nvme_strerror(err));
70817074
else if (err != 0)
@@ -7139,6 +7132,7 @@ static int write_zeroes(int argc, char **argv, struct command *acmd, struct plug
71397132
_cleanup_free_ struct nvme_id_ns *ns = NULL;
71407133
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
71417134
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
7135+
struct nvme_passthru_cmd cmd;
71427136
__u8 sts = 0, pif = 0;
71437137
__u16 control = 0;
71447138
__u32 result = 0;
@@ -7264,24 +7258,13 @@ static int write_zeroes(int argc, char **argv, struct command *acmd, struct plug
72647258
if (invalid_tags(cfg.storage_tag, cfg.ref_tag, sts, pif))
72657259
return -EINVAL;
72667260

7267-
struct nvme_io_args args = {
7268-
.args_size = sizeof(args),
7269-
.nsid = cfg.namespace_id,
7270-
.slba = cfg.start_block,
7271-
.nlb = cfg.block_count,
7272-
.control = control,
7273-
.reftag = (__u32)cfg.ref_tag,
7274-
.reftag_u64 = cfg.ref_tag,
7275-
.apptag = cfg.app_tag,
7276-
.appmask = cfg.app_tag_mask,
7277-
.sts = sts,
7278-
.pif = pif,
7279-
.storage_tag = cfg.storage_tag,
7280-
.dspec = cfg.dspec,
7281-
.timeout = nvme_cfg.timeout,
7282-
.result = &result,
7283-
};
7284-
err = nvme_write_zeros(hdl, &args);
7261+
nvme_init_write_zeros(&cmd, cfg.namespace_id, cfg.start_block,
7262+
cfg.block_count, control, cfg.dspec, 0, 0);
7263+
nvme_init_var_size_tags((struct nvme_passthru_cmd64 *)&cmd, pif, sts,
7264+
cfg.ref_tag, cfg.storage_tag);
7265+
nvme_init_app_tag((struct nvme_passthru_cmd64 *)&cmd, cfg.app_tag,
7266+
cfg.app_tag_mask);
7267+
err = nvme_submit_admin_passthru(hdl, &cmd, &result);
72857268
if (err < 0)
72867269
nvme_show_error("write-zeroes: %s", nvme_strerror(err));
72877270
else if (err != 0)
@@ -7993,23 +7976,24 @@ unsigned long long elapsed_utime(struct timeval start_time,
79937976

79947977
static int submit_io(int opcode, char *command, const char *desc, int argc, char **argv)
79957978
{
7979+
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
7980+
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
7981+
unsigned long long buffer_size = 0, mbuffer_size = 0;
7982+
_cleanup_free_ struct nvme_nvm_id_ns *nvm_ns = NULL;
7983+
_cleanup_huge_ struct nvme_mem_huge mh = { 0, };
7984+
_cleanup_free_ struct nvme_id_ns *ns = NULL;
7985+
unsigned int logical_block_size = 0;
79967986
struct timeval start_time, end_time;
7997-
void *buffer;
79987987
_cleanup_free_ void *mbuffer = NULL;
7999-
int err = 0;
80007988
_cleanup_fd_ int dfd = -1, mfd = -1;
8001-
int flags, pi_size;
8002-
int mode = 0644;
7989+
__u8 lba_index, sts = 0, pif = 0;
80037990
__u16 control = 0, nblocks = 0;
7991+
struct nvme_passthru_cmd cmd;
7992+
int flags, pi_size;
80047993
__u32 dsmgmt = 0;
8005-
unsigned int logical_block_size = 0;
8006-
unsigned long long buffer_size = 0, mbuffer_size = 0;
8007-
_cleanup_huge_ struct nvme_mem_huge mh = { 0, };
8008-
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
8009-
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
8010-
_cleanup_free_ struct nvme_nvm_id_ns *nvm_ns = NULL;
8011-
_cleanup_free_ struct nvme_id_ns *ns = NULL;
8012-
__u8 lba_index, sts = 0, pif = 0;
7994+
int mode = 0644;
7995+
void *buffer;
7996+
int err = 0;
80137997
__u16 ms;
80147998

80157999
const char *start_block_addr = "64-bit addr of first block to access";
@@ -8304,30 +8288,26 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
83048288
if (nvme_cfg.dry_run)
83058289
return 0;
83068290

8307-
struct nvme_io_args args = {
8308-
.args_size = sizeof(args),
8309-
.nsid = cfg.namespace_id,
8310-
.slba = cfg.start_block,
8311-
.nlb = nblocks,
8312-
.control = control,
8313-
.dsm = cfg.dsmgmt,
8314-
.sts = sts,
8315-
.pif = pif,
8316-
.dspec = cfg.dspec,
8317-
.reftag = (__u32)cfg.ref_tag,
8318-
.reftag_u64 = cfg.ref_tag,
8319-
.apptag = cfg.app_tag,
8320-
.appmask = cfg.app_tag_mask,
8321-
.storage_tag = cfg.storage_tag,
8322-
.data_len = buffer_size,
8323-
.data = buffer,
8324-
.metadata_len = mbuffer_size,
8325-
.metadata = mbuffer,
8326-
.timeout = nvme_cfg.timeout,
8327-
.result = NULL,
8328-
};
8291+
nvme_init_io(&cmd, opcode, cfg.namespace_id, cfg.start_block, buffer,
8292+
buffer_size, mbuffer, mbuffer_size);
8293+
cmd.cdw12 = NVME_FIELD_ENCODE(nblocks,
8294+
NVME_IOCS_COMMON_CDW12_NLB_SHIFT,
8295+
NVME_IOCS_COMMON_CDW12_NLB_MASK) |
8296+
NVME_FIELD_ENCODE(control,
8297+
NVME_IOCS_COMMON_CDW12_CONTROL_SHIFT,
8298+
NVME_IOCS_COMMON_CDW12_CONTROL_MASK);
8299+
cmd.cdw13 = NVME_FIELD_ENCODE(cfg.dspec,
8300+
NVME_IOCS_COMMON_CDW13_DSPEC_SHIFT,
8301+
NVME_IOCS_COMMON_CDW13_DSPEC_MASK) |
8302+
NVME_FIELD_ENCODE(cfg.dsmgmt,
8303+
NVME_IOCS_COMMON_CDW13_DSM_SHIFT,
8304+
NVME_IOCS_COMMON_CDW13_DSM_MASK);
8305+
nvme_init_var_size_tags((struct nvme_passthru_cmd64 *)&cmd, pif, sts,
8306+
cfg.ref_tag, cfg.storage_tag);
8307+
nvme_init_app_tag((struct nvme_passthru_cmd64 *)&cmd, cfg.app_tag,
8308+
cfg.app_tag_mask);
83298309
gettimeofday(&start_time, NULL);
8330-
err = nvme_io(hdl, &args, opcode);
8310+
err = nvme_submit_admin_passthru(hdl, &cmd, NULL);
83318311
gettimeofday(&end_time, NULL);
83328312
if (cfg.latency)
83338313
printf(" latency: %s: %llu us\n", command, elapsed_utime(start_time, end_time));
@@ -8385,6 +8365,7 @@ static int verify_cmd(int argc, char **argv, struct command *acmd, struct plugin
83858365
_cleanup_free_ struct nvme_id_ns *ns = NULL;
83868366
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
83878367
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
8368+
struct nvme_passthru_cmd cmd;
83888369
__u8 sts = 0, pif = 0;
83898370
__u16 control = 0;
83908371
int err;
@@ -8486,23 +8467,13 @@ static int verify_cmd(int argc, char **argv, struct command *acmd, struct plugin
84868467
if (invalid_tags(cfg.storage_tag, cfg.ref_tag, sts, pif))
84878468
return -EINVAL;
84888469

8489-
struct nvme_io_args args = {
8490-
.args_size = sizeof(args),
8491-
.nsid = cfg.namespace_id,
8492-
.slba = cfg.start_block,
8493-
.nlb = cfg.block_count,
8494-
.control = control,
8495-
.reftag = cfg.ref_tag,
8496-
.reftag_u64 = cfg.ref_tag,
8497-
.apptag = cfg.app_tag,
8498-
.appmask = cfg.app_tag_mask,
8499-
.sts = sts,
8500-
.pif = pif,
8501-
.storage_tag = cfg.storage_tag,
8502-
.timeout = nvme_cfg.timeout,
8503-
.result = NULL,
8504-
};
8505-
err = nvme_verify(hdl, &args);
8470+
nvme_init_verify(&cmd, cfg.namespace_id, cfg.start_block,
8471+
cfg.block_count, control, 0, NULL, 0, NULL, 0);
8472+
nvme_init_var_size_tags((struct nvme_passthru_cmd64 *)&cmd, pif, sts,
8473+
cfg.ref_tag, cfg.storage_tag);
8474+
nvme_init_app_tag((struct nvme_passthru_cmd64 *)&cmd, cfg.app_tag,
8475+
cfg.app_tag_mask);
8476+
err = nvme_submit_admin_passthru(hdl, &cmd, NULL);
85068477
if (err < 0)
85078478
nvme_show_error("verify: %s", nvme_strerror(err));
85088479
else if (err != 0)

0 commit comments

Comments
 (0)