@@ -7299,12 +7299,12 @@ static int dsm(int argc, char **argv, struct command *acmd, struct plugin *plugi
72997299 _cleanup_nvme_transport_handle_ struct nvme_transport_handle * hdl = NULL ;
73007300 _cleanup_free_ struct nvme_dsm_range * dsm = NULL ;
73017301 struct nvme_passthru_cmd cmd ;
7302- uint16_t nr , nc , nb , ns ;
73037302 __u32 ctx_attrs [256 ] = {0 ,};
73047303 __u32 nlbs [256 ] = {0 ,};
73057304 __u64 slbas [256 ] = {0 ,};
7306- int err ;
73077305 nvme_print_flags_t flags ;
7306+ uint16_t nc , nb , ns ;
7307+ int err ;
73087308
73097309 struct config {
73107310 __u32 namespace_id ;
@@ -7351,8 +7351,11 @@ static int dsm(int argc, char **argv, struct command *acmd, struct plugin *plugi
73517351 nc = argconfig_parse_comma_sep_array_u32 (cfg .ctx_attrs , ctx_attrs , ARRAY_SIZE (ctx_attrs ));
73527352 nb = argconfig_parse_comma_sep_array_u32 (cfg .blocks , nlbs , ARRAY_SIZE (nlbs ));
73537353 ns = argconfig_parse_comma_sep_array_u64 (cfg .slbas , slbas , ARRAY_SIZE (slbas ));
7354- nr = max (nc , max (nb , ns ));
7355- if (!nr || nr > 256 ) {
7354+ if (nc != nb || nb != ns ) {
7355+ nvme_show_error ("No valid range definition provided" );
7356+ return - EINVAL ;
7357+ }
7358+ if (!nc || nc > 256 ) {
73567359 nvme_show_error ("No range definition provided" );
73577360 return - EINVAL ;
73587361 }
@@ -7364,15 +7367,19 @@ static int dsm(int argc, char **argv, struct command *acmd, struct plugin *plugi
73647367 return err ;
73657368 }
73667369 }
7367- if (!cfg .cdw11 )
7368- cfg .cdw11 = (cfg .ad << 2 ) | (cfg .idw << 1 ) | (cfg .idr << 0 );
7370+ if (cfg .cdw11 ) {
7371+ cfg .ad = NVME_GET (cfg .cdw11 , DSM_CDW11_AD );
7372+ cfg .idw = NVME_GET (cfg .cdw11 , DSM_CDW11_IDW );
7373+ cfg .idr = NVME_GET (cfg .cdw11 , DSM_CDW11_IDR );
7374+ }
73697375
7370- dsm = nvme_alloc (sizeof (* dsm ) * 256 );
7376+ dsm = nvme_alloc (sizeof (* dsm ) * nc );
73717377 if (!dsm )
73727378 return - ENOMEM ;
73737379
7380+ nvme_init_dsm_range (dsm , ctx_attrs , nlbs , slbas , nc );
73747381 nvme_init_dsm (& cmd , cfg .namespace_id , nr , cfg .idr , cfg .idw , cfg .ad , dsm ,
7375- sizeof (* dsm ) * 256 );
7382+ sizeof (* dsm ) * nc );
73767383 err = nvme_submit_io_passthru (hdl , & cmd , NULL );
73777384 if (err < 0 )
73787385 nvme_show_error ("data-set management: %s" , nvme_strerror (err ));
0 commit comments