@@ -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 */
52435244static 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
0 commit comments