From 0d3077716913282dc1455da01f5e916bb605f7a1 Mon Sep 17 00:00:00 2001 From: zerone Date: Wed, 1 Mar 2023 18:58:26 +0800 Subject: [PATCH] types: Update position of elbatm in struct nvme_copy_range{_f1} Update the Expected Logical Block Application Tag and Reference Tag in struct nvme_copy_range and struct nvme_copy_range_f1. 1. The elbatm is behind elbat fields, which are defined in section 3.2.2 Copy command 2. Storage and Reference Space is declared as an big-endian order, the elbt[10] fields need to reassigned [dwagner: squashed changes and updated commit message] Signed-off-by: Daniel Wagner --- src/nvme/types.h | 4 ++-- src/nvme/util.c | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/nvme/types.h b/src/nvme/types.h index 2edc8930..8a993715 100644 --- a/src/nvme/types.h +++ b/src/nvme/types.h @@ -4640,8 +4640,8 @@ struct nvme_copy_range { __le16 nlb; __u8 rsvd18[6]; __le32 eilbrt; - __le16 elbatm; __le16 elbat; + __le16 elbatm; }; /** @@ -4661,8 +4661,8 @@ struct nvme_copy_range_f1 { __le16 nlb; __u8 rsvd18[8]; __u8 elbt[10]; - __le16 elbatm; __le16 elbat; + __le16 elbatm; }; /** diff --git a/src/nvme/util.c b/src/nvme/util.c index 0354afef..e7cbc8a8 100644 --- a/src/nvme/util.c +++ b/src/nvme/util.c @@ -403,14 +403,17 @@ void nvme_init_copy_range_f1(struct nvme_copy_range_f1 *copy, __u16 *nlbs, __u64 *slbas, __u64 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr) { - int i; + int i, j; for (i = 0; i < nr; i++) { copy[i].nlb = cpu_to_le16(nlbs[i]); copy[i].slba = cpu_to_le64(slbas[i]); - copy[i].elbt[2] = cpu_to_le64(eilbrts[i]); copy[i].elbatm = cpu_to_le16(elbatms[i]); copy[i].elbat = cpu_to_le16(elbats[i]); + for (j = 0; j < 8; j++) + copy[i].elbt[9 - j] = (eilbrts[i] >> (8 * j)) & 0xff; + copy[i].elbt[1] = 0; + copy[i].elbt[0] = 0; } } -- 2.50.1