Skip to content

Commit c22d222

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 13062f9 commit c22d222

1 file changed

Lines changed: 55 additions & 47 deletions

File tree

nvme.c

Lines changed: 55 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,6 @@ static ssize_t getrandom_bytes(void *buf, size_t buflen)
339339
#endif
340340
}
341341

342-
343342
static int check_arg_dev(int argc, char **argv)
344343
{
345344
if (optind >= argc) {
@@ -7387,6 +7386,7 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
73877386
_cleanup_nvme_global_ctx_ struct nvme_global_ctx *ctx = NULL;
73887387
_cleanup_nvme_transport_handle_ struct nvme_transport_handle *hdl = NULL;
73897388
__u16 nr, nb, ns, nrts, natms, nats, nids;
7389+
struct nvme_passthru_cmd cmd;
73907390
__u16 nlbs[256] = { 0 };
73917391
__u64 slbas[256] = { 0 };
73927392
__u32 snsids[256] = { 0 };
@@ -7477,24 +7477,35 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
74777477
if (err)
74787478
return err;
74797479

7480-
nb = argconfig_parse_comma_sep_array_u16(cfg.nlbs, nlbs, ARRAY_SIZE(nlbs));
7481-
ns = argconfig_parse_comma_sep_array_u64(cfg.slbas, slbas, ARRAY_SIZE(slbas));
7482-
nids = argconfig_parse_comma_sep_array_u32(cfg.snsids, snsids, ARRAY_SIZE(snsids));
7483-
argconfig_parse_comma_sep_array_u16(cfg.sopts, sopts, ARRAY_SIZE(sopts));
7484-
7485-
if (cfg.format == 0 || cfg.format == 2) {
7486-
nrts = argconfig_parse_comma_sep_array_u32(cfg.eilbrts, eilbrts.short_pi,
7487-
ARRAY_SIZE(eilbrts.short_pi));
7488-
} else if (cfg.format == 1 || cfg.format == 3) {
7489-
nrts = argconfig_parse_comma_sep_array_u64(cfg.eilbrts, eilbrts.long_pi,
7490-
ARRAY_SIZE(eilbrts.long_pi));
7491-
} else {
7480+
nb = argconfig_parse_comma_sep_array_u16(cfg.nlbs, nlbs,
7481+
ARRAY_SIZE(nlbs));
7482+
ns = argconfig_parse_comma_sep_array_u64(cfg.slbas, slbas,
7483+
ARRAY_SIZE(slbas));
7484+
nids = argconfig_parse_comma_sep_array_u32(cfg.snsids, snsids,
7485+
ARRAY_SIZE(snsids));
7486+
argconfig_parse_comma_sep_array_u16(cfg.sopts, sopts,
7487+
ARRAY_SIZE(sopts));
7488+
7489+
switch (cfg.format) {
7490+
case 0:
7491+
case 2:
7492+
nrts = argconfig_parse_comma_sep_array_u32(cfg.eilbrts,
7493+
eilbrts.short_pi, ARRAY_SIZE(eilbrts.short_pi));
7494+
break;
7495+
case 1:
7496+
case 3:
7497+
nrts = argconfig_parse_comma_sep_array_u64(cfg.eilbrts,
7498+
eilbrts.long_pi, ARRAY_SIZE(eilbrts.long_pi));
7499+
break;
7500+
default:
74927501
nvme_show_error("invalid format");
74937502
return -EINVAL;
74947503
}
74957504

7496-
natms = argconfig_parse_comma_sep_array_u32(cfg.elbatms, elbatms, ARRAY_SIZE(elbatms));
7497-
nats = argconfig_parse_comma_sep_array_u32(cfg.elbats, elbats, ARRAY_SIZE(elbats));
7505+
natms = argconfig_parse_comma_sep_array_u32(cfg.elbatms, elbatms,
7506+
ARRAY_SIZE(elbatms));
7507+
nats = argconfig_parse_comma_sep_array_u32(cfg.elbats, elbats,
7508+
ARRAY_SIZE(elbats));
74987509

74997510
nr = max(nb, max(ns, max(nrts, max(natms, nats))));
75007511
if (cfg.format == 2 || cfg.format == 3) {
@@ -7514,7 +7525,8 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
75147525
if (!cfg.namespace_id) {
75157526
err = nvme_get_nsid(hdl, &cfg.namespace_id);
75167527
if (err < 0) {
7517-
nvme_show_error("get-namespace-id: %s", nvme_strerror(-err));
7528+
nvme_show_error("get-namespace-id: %s",
7529+
nvme_strerror(-err));
75187530
return err;
75197531
}
75207532
}
@@ -7523,37 +7535,33 @@ static int copy_cmd(int argc, char **argv, struct command *acmd, struct plugin *
75237535
if (!copy)
75247536
return -ENOMEM;
75257537

7526-
if (cfg.format == 0)
7527-
nvme_init_copy_range(copy->f0, nlbs, slbas, eilbrts.short_pi, elbatms, elbats, nr);
7528-
else if (cfg.format == 1)
7529-
nvme_init_copy_range_f1(copy->f1, nlbs, slbas, eilbrts.long_pi, elbatms, elbats, nr);
7530-
else if (cfg.format == 2)
7531-
nvme_init_copy_range_f2(copy->f2, snsids, nlbs, slbas, sopts, eilbrts.short_pi, elbatms,
7532-
elbats, nr);
7533-
else if (cfg.format == 3)
7534-
nvme_init_copy_range_f3(copy->f3, snsids, nlbs, slbas, sopts, eilbrts.long_pi, elbatms,
7535-
elbats, nr);
7536-
7537-
struct nvme_copy_args args = {
7538-
.args_size = sizeof(args),
7539-
.nsid = cfg.namespace_id,
7540-
.copy = copy->f0,
7541-
.sdlba = cfg.sdlba,
7542-
.nr = nr,
7543-
.prinfor = cfg.prinfor,
7544-
.prinfow = cfg.prinfow,
7545-
.dtype = cfg.dtype,
7546-
.dspec = cfg.dspec,
7547-
.format = cfg.format,
7548-
.lr = cfg.lr,
7549-
.fua = cfg.fua,
7550-
.ilbrt_u64 = cfg.ilbrt,
7551-
.lbatm = cfg.lbatm,
7552-
.lbat = cfg.lbat,
7553-
.timeout = nvme_cfg.timeout,
7554-
.result = NULL,
7555-
};
7556-
err = nvme_copy(hdl, &args);
7538+
switch (cfg.format) {
7539+
case 1:
7540+
nvme_init_copy_range_f1(copy->f1, nlbs, slbas, eilbrts.long_pi,
7541+
elbatms, elbats, nr);
7542+
break;
7543+
case 2:
7544+
nvme_init_copy_range_f2(copy->f2, snsids, nlbs, slbas, sopts,
7545+
eilbrts.short_pi, elbatms, elbats, nr);
7546+
break;
7547+
case 3:
7548+
nvme_init_copy_range_f3(copy->f3, snsids, nlbs, slbas, sopts,
7549+
eilbrts.long_pi, elbatms, elbats, nr);
7550+
break;
7551+
default:
7552+
nvme_init_copy_range(copy->f0, nlbs, slbas, eilbrts.short_pi,
7553+
elbatms, elbats, nr);
7554+
break;
7555+
}
7556+
7557+
nvme_init_copy(&cmd, cfg.namespace_id, cfg.sdlba, nr, cfg.format,
7558+
cfg.prinfor, cfg.prinfow, 0, cfg.dtype, false, false,
7559+
cfg.fua, cfg.lr, 0, cfg.dspec, copy->f0);
7560+
nvme_init_var_size_tags((struct nvme_passthru_cmd64 *)&cmd,
7561+
NVME_NVM_PIF_32B_GUARD, 0, cfg.ilbrt, 0);
7562+
nvme_init_app_tag((struct nvme_passthru_cmd64 *)&cmd, cfg.lbat,
7563+
cfg.lbatm);
7564+
err = nvme_submit_admin_passthru(hdl, &cmd, NULL);
75577565
if (err < 0)
75587566
nvme_show_error("NVMe Copy: %s", nvme_strerror(-err));
75597567
else if (err != 0)

0 commit comments

Comments
 (0)