Skip to content

Commit 9f1533f

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

1 file changed

Lines changed: 53 additions & 46 deletions

File tree

nvme.c

Lines changed: 53 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,6 @@ static ssize_t getrandom_bytes(void *buf, size_t buflen)
338338
return result;
339339
}
340340

341-
342341
static int check_arg_dev(int argc, char **argv)
343342
{
344343
if (optind >= argc) {
@@ -7412,6 +7411,7 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
74127411
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
74137412
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
74147413
__u16 nr, nb, ns, nrts, natms, nats, nids;
7414+
struct nvme_passthru_cmd cmd;
74157415
__u16 nlbs[256] = { 0 };
74167416
__u64 slbas[256] = { 0 };
74177417
__u32 snsids[256] = { 0 };
@@ -7502,24 +7502,35 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
75027502
if (err)
75037503
return err;
75047504

7505-
nb = argconfig_parse_comma_sep_array_u16(cfg.nlbs, nlbs, ARRAY_SIZE(nlbs));
7506-
ns = argconfig_parse_comma_sep_array_u64(cfg.slbas, slbas, ARRAY_SIZE(slbas));
7507-
nids = argconfig_parse_comma_sep_array_u32(cfg.snsids, snsids, ARRAY_SIZE(snsids));
7508-
argconfig_parse_comma_sep_array_u16(cfg.sopts, sopts, ARRAY_SIZE(sopts));
7509-
7510-
if (cfg.format == 0 || cfg.format == 2) {
7511-
nrts = argconfig_parse_comma_sep_array_u32(cfg.eilbrts, eilbrts.short_pi,
7512-
ARRAY_SIZE(eilbrts.short_pi));
7513-
} else if (cfg.format == 1 || cfg.format == 3) {
7514-
nrts = argconfig_parse_comma_sep_array_u64(cfg.eilbrts, eilbrts.long_pi,
7515-
ARRAY_SIZE(eilbrts.long_pi));
7516-
} else {
7505+
nb = argconfig_parse_comma_sep_array_u16(cfg.nlbs, nlbs,
7506+
ARRAY_SIZE(nlbs));
7507+
ns = argconfig_parse_comma_sep_array_u64(cfg.slbas, slbas,
7508+
ARRAY_SIZE(slbas));
7509+
nids = argconfig_parse_comma_sep_array_u32(cfg.snsids, snsids,
7510+
ARRAY_SIZE(snsids));
7511+
argconfig_parse_comma_sep_array_u16(cfg.sopts, sopts,
7512+
ARRAY_SIZE(sopts));
7513+
7514+
switch (cfg.format) {
7515+
case 0:
7516+
case 2:
7517+
nrts = argconfig_parse_comma_sep_array_u32(cfg.eilbrts,
7518+
eilbrts.short_pi, ARRAY_SIZE(eilbrts.short_pi));
7519+
break;
7520+
case 1:
7521+
case 3:
7522+
nrts = argconfig_parse_comma_sep_array_u64(cfg.eilbrts,
7523+
eilbrts.long_pi, ARRAY_SIZE(eilbrts.long_pi));
7524+
break;
7525+
default:
75177526
nvme_show_error("invalid format");
75187527
return -EINVAL;
75197528
}
75207529

7521-
natms = argconfig_parse_comma_sep_array_u32(cfg.elbatms, elbatms, ARRAY_SIZE(elbatms));
7522-
nats = argconfig_parse_comma_sep_array_u32(cfg.elbats, elbats, ARRAY_SIZE(elbats));
7530+
natms = argconfig_parse_comma_sep_array_u32(cfg.elbatms, elbatms,
7531+
ARRAY_SIZE(elbatms));
7532+
nats = argconfig_parse_comma_sep_array_u32(cfg.elbats, elbats,
7533+
ARRAY_SIZE(elbats));
75237534

75247535
nr = max(nb, max(ns, max(nrts, max(natms, nats))));
75257536
if (cfg.format == 2 || cfg.format == 3) {
@@ -7548,37 +7559,33 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
75487559
if (!copy)
75497560
return -ENOMEM;
75507561

7551-
if (cfg.format == 0)
7552-
nvme_init_copy_range(copy->f0, nlbs, slbas, eilbrts.short_pi, elbatms, elbats, nr);
7553-
else if (cfg.format == 1)
7554-
nvme_init_copy_range_f1(copy->f1, nlbs, slbas, eilbrts.long_pi, elbatms, elbats, nr);
7555-
else if (cfg.format == 2)
7556-
nvme_init_copy_range_f2(copy->f2, snsids, nlbs, slbas, sopts, eilbrts.short_pi, elbatms,
7557-
elbats, nr);
7558-
else if (cfg.format == 3)
7559-
nvme_init_copy_range_f3(copy->f3, snsids, nlbs, slbas, sopts, eilbrts.long_pi, elbatms,
7560-
elbats, nr);
7561-
7562-
struct nvme_copy_args args = {
7563-
.args_size = sizeof(args),
7564-
.nsid = cfg.namespace_id,
7565-
.copy = copy->f0,
7566-
.sdlba = cfg.sdlba,
7567-
.nr = nr,
7568-
.prinfor = cfg.prinfor,
7569-
.prinfow = cfg.prinfow,
7570-
.dtype = cfg.dtype,
7571-
.dspec = cfg.dspec,
7572-
.format = cfg.format,
7573-
.lr = cfg.lr,
7574-
.fua = cfg.fua,
7575-
.ilbrt_u64 = cfg.ilbrt,
7576-
.lbatm = cfg.lbatm,
7577-
.lbat = cfg.lbat,
7578-
.timeout = nvme_cfg.timeout,
7579-
.result = NULL,
7580-
};
7581-
err = nvme_copy(hdl, &args);
7562+
switch (cfg.format) {
7563+
case 1:
7564+
nvme_init_copy_range_f1(copy->f1, nlbs, slbas, eilbrts.long_pi,
7565+
elbatms, elbats, nr);
7566+
break;
7567+
case 2:
7568+
nvme_init_copy_range_f2(copy->f2, snsids, nlbs, slbas, sopts,
7569+
eilbrts.short_pi, elbatms, elbats, nr);
7570+
break;
7571+
case 3:
7572+
nvme_init_copy_range_f3(copy->f3, snsids, nlbs, slbas, sopts,
7573+
eilbrts.long_pi, elbatms, elbats, nr);
7574+
break;
7575+
default:
7576+
nvme_init_copy_range(copy->f0, nlbs, slbas, eilbrts.short_pi,
7577+
elbatms, elbats, nr);
7578+
break;
7579+
}
7580+
7581+
nvme_init_copy(&cmd, cfg.namespace_id, cfg.sdlba, nr, cfg.format,
7582+
cfg.prinfor, cfg.prinfow, 0, cfg.dtype, false, false,
7583+
cfg.fua, cfg.lr, 0, cfg.dspec, copy->f0);
7584+
nvme_init_var_size_tags((struct nvme_passthru_cmd64 *)&cmd,
7585+
NVME_NVM_PIF_32B_GUARD, 0, cfg.ilbrt, 0);
7586+
nvme_init_app_tag((struct nvme_passthru_cmd64 *)&cmd, cfg.lbat,
7587+
cfg.lbatm);
7588+
err = nvme_submit_admin_passthru(hdl, &cmd, NULL);
75827589
if (err < 0)
75837590
nvme_show_error("NVMe Copy: %s", nvme_strerror(err));
75847591
else if (err != 0)

0 commit comments

Comments
 (0)