Skip to content

Commit 4fe3b3e

Browse files
committed
libnvme/types: change copy desc format 0h and 2h elbt to array
Change odd big-endian field as same with the format 1h and 2h. Signed-off-by: Tokunori Ikegami <[email protected]>
1 parent f5f526c commit 4fe3b3e

2 files changed

Lines changed: 20 additions & 13 deletions

File tree

libnvme/src/nvme/cmds.h

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5237,18 +5237,17 @@ nvme_init_dsm_range(struct nvme_dsm_range *dsm, __u32 *ctx_attrs,
52375237

52385238
/**
52395239
* nvme_init_copy_range_elbt() - Constructs a copy range elbt structure
5240-
* @elbt:
5241-
* @eilbrts: Expected initial logical block reference tag
5240+
* @elbt: Expected logical block tags
5241+
* @eilbrt: Expected initial logical block reference tag
5242+
* @size: eilbrts size
52425243
*/
52435244
static inline void
5244-
nvme_init_copy_range_elbt(__u8 *elbt, __u64 eilbrt)
5245+
nvme_init_copy_range_elbt(__u8 *elbt, __u8 *eilbrt, int size)
52455246
{
52465247
int i;
52475248

5248-
for (i = 0; i < 8; i++)
5249-
elbt[9 - i] = (eilbrt >> (8 * i)) & 0xff;
5250-
elbt[1] = 0;
5251-
elbt[0] = 0;
5249+
for (i = 0; i < size; i++)
5250+
elbt[size - 1 - i] = eilbrt[i];
52525251
}
52535252

52545253
/**
@@ -5271,7 +5270,8 @@ nvme_init_copy_range_f0(struct nvme_copy_range_f0 *copy, __u16 *nlbs,
52715270
for (i = 0; i < nr; i++) {
52725271
copy[i].nlb = htole16(nlbs[i]);
52735272
copy[i].slba = htole64(slbas[i]);
5274-
copy[i].elbt = htobe32(elbts[i]);
5273+
nvme_init_copy_range_elbt(copy[i].elbt, (__u8 *)&elbts[i],
5274+
sizeof(elbts[i]));
52755275
copy[i].elbatm = htole16(elbatms[i]);
52765276
copy[i].elbat = htole16(elbats[i]);
52775277
}
@@ -5294,12 +5294,15 @@ nvme_init_copy_range_f1(struct nvme_copy_range_f1 *copy, __u16 *nlbs,
52945294
{
52955295
int i;
52965296

5297+
memset(copy, 0, sizeof(*copy) * nr);
5298+
52975299
for (i = 0; i < nr; i++) {
52985300
copy[i].nlb = htole16(nlbs[i]);
52995301
copy[i].slba = htole64(slbas[i]);
53005302
copy[i].elbatm = htole16(elbatms[i]);
53015303
copy[i].elbat = htole16(elbats[i]);
5302-
nvme_init_copy_range_elbt(copy[i].elbt, eilbrts[i]);
5304+
nvme_init_copy_range_elbt(&copy[i].elbt[2], (__u8 *)&eilbrts[i],
5305+
sizeof(eilbrts[i]));
53035306
}
53045307
}
53055308

@@ -5328,7 +5331,8 @@ nvme_init_copy_range_f2(struct nvme_copy_range_f2 *copy,
53285331
copy[i].nlb = htole16(nlbs[i]);
53295332
copy[i].slba = htole64(slbas[i]);
53305333
copy[i].sopt = htole16(sopts[i]);
5331-
copy[i].elbt = htobe32(elbts[i]);
5334+
nvme_init_copy_range_elbt(copy[i].elbt, (__u8 *)&elbts[i],
5335+
sizeof(elbts[i]));
53325336
copy[i].elbatm = htole16(elbatms[i]);
53335337
copy[i].elbat = htole16(elbats[i]);
53345338
}
@@ -5354,14 +5358,17 @@ nvme_init_copy_range_f3(struct nvme_copy_range_f3 *copy, __u32 *snsids,
53545358
{
53555359
int i;
53565360

5361+
memset(copy, 0, sizeof(*copy) * nr);
5362+
53575363
for (i = 0; i < nr; i++) {
53585364
copy[i].snsid = htole32(snsids[i]);
53595365
copy[i].nlb = htole16(nlbs[i]);
53605366
copy[i].slba = htole64(slbas[i]);
53615367
copy[i].sopt = htole16(sopts[i]);
53625368
copy[i].elbatm = htole16(elbatms[i]);
53635369
copy[i].elbat = htole16(elbats[i]);
5364-
nvme_init_copy_range_elbt(copy[i].elbt, eilbrts[i]);
5370+
nvme_init_copy_range_elbt(&copy[i].elbt[2], (__u8 *)&eilbrts[i],
5371+
sizeof(eilbrts[i]));
53655372
}
53665373
}
53675374

libnvme/src/nvme/types.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6457,7 +6457,7 @@ struct nvme_copy_range_f0 {
64576457
__u8 rsvd19;
64586458
__le16 cev;
64596459
__u8 rsvd22[2];
6460-
__be32 elbt;
6460+
__u8 elbt[4];
64616461
__le16 elbat;
64626462
__le16 elbatm;
64636463
};
@@ -6521,7 +6521,7 @@ struct nvme_copy_range_f2 {
65216521
__u8 rsvd19;
65226522
__le16 cev;
65236523
__le16 sopt;
6524-
__be32 elbt;
6524+
__u8 elbt[4];
65256525
__le16 elbat;
65266526
__le16 elbatm;
65276527
};

0 commit comments

Comments
 (0)