@@ -7023,6 +7023,7 @@ static int write_uncor(int argc, char **argv, struct command *acmd, struct plugi
70237023
70247024 _cleanup_nvme_global_ctx_ struct nvme_global_ctx * ctx = NULL ;
70257025 _cleanup_nvme_transport_handle_ struct nvme_transport_handle * hdl = NULL ;
7026+ struct nvme_passthru_cmd cmd ;
70267027 int err ;
70277028
70287029 struct config {
@@ -7065,17 +7066,9 @@ static int write_uncor(int argc, char **argv, struct command *acmd, struct plugi
70657066 return - EINVAL ;
70667067 }
70677068
7068- struct nvme_io_args args = {
7069- .args_size = sizeof (args ),
7070- .nsid = cfg .namespace_id ,
7071- .slba = cfg .start_block ,
7072- .nlb = cfg .block_count ,
7073- .control = cfg .dtype << 4 ,
7074- .dspec = cfg .dspec ,
7075- .timeout = nvme_cfg .timeout ,
7076- .result = NULL ,
7077- };
7078- err = nvme_write_uncorrectable (hdl , & args );
7069+ nvme_init_write_uncorrectable (& cmd , cfg .namespace_id , cfg .start_block ,
7070+ cfg .block_count , cfg .dtype << 4 , cfg .dspec );
7071+ err = nvme_submit_admin_passthru (hdl , & cmd , NULL );
70797072 if (err < 0 )
70807073 nvme_show_error ("write uncorrectable: %s" , nvme_strerror (err ));
70817074 else if (err != 0 )
@@ -7139,6 +7132,7 @@ static int write_zeroes(int argc, char **argv, struct command *acmd, struct plug
71397132 _cleanup_free_ struct nvme_id_ns * ns = NULL ;
71407133 _cleanup_nvme_global_ctx_ struct nvme_global_ctx * ctx = NULL ;
71417134 _cleanup_nvme_transport_handle_ struct nvme_transport_handle * hdl = NULL ;
7135+ struct nvme_passthru_cmd cmd ;
71427136 __u8 sts = 0 , pif = 0 ;
71437137 __u16 control = 0 ;
71447138 __u32 result = 0 ;
@@ -7264,24 +7258,13 @@ static int write_zeroes(int argc, char **argv, struct command *acmd, struct plug
72647258 if (invalid_tags (cfg .storage_tag , cfg .ref_tag , sts , pif ))
72657259 return - EINVAL ;
72667260
7267- struct nvme_io_args args = {
7268- .args_size = sizeof (args ),
7269- .nsid = cfg .namespace_id ,
7270- .slba = cfg .start_block ,
7271- .nlb = cfg .block_count ,
7272- .control = control ,
7273- .reftag = (__u32 )cfg .ref_tag ,
7274- .reftag_u64 = cfg .ref_tag ,
7275- .apptag = cfg .app_tag ,
7276- .appmask = cfg .app_tag_mask ,
7277- .sts = sts ,
7278- .pif = pif ,
7279- .storage_tag = cfg .storage_tag ,
7280- .dspec = cfg .dspec ,
7281- .timeout = nvme_cfg .timeout ,
7282- .result = & result ,
7283- };
7284- err = nvme_write_zeros (hdl , & args );
7261+ nvme_init_write_zeros (& cmd , cfg .namespace_id , cfg .start_block ,
7262+ cfg .block_count , control , cfg .dspec , 0 , 0 );
7263+ nvme_init_var_size_tags ((struct nvme_passthru_cmd64 * )& cmd , pif , sts ,
7264+ cfg .ref_tag , cfg .storage_tag );
7265+ nvme_init_app_tag ((struct nvme_passthru_cmd64 * )& cmd , cfg .app_tag ,
7266+ cfg .app_tag_mask );
7267+ err = nvme_submit_admin_passthru (hdl , & cmd , & result );
72857268 if (err < 0 )
72867269 nvme_show_error ("write-zeroes: %s" , nvme_strerror (err ));
72877270 else if (err != 0 )
@@ -7993,23 +7976,24 @@ unsigned long long elapsed_utime(struct timeval start_time,
79937976
79947977static int submit_io (int opcode , char * command , const char * desc , int argc , char * * argv )
79957978{
7979+ _cleanup_nvme_transport_handle_ struct nvme_transport_handle * hdl = NULL ;
7980+ _cleanup_nvme_global_ctx_ struct nvme_global_ctx * ctx = NULL ;
7981+ unsigned long long buffer_size = 0 , mbuffer_size = 0 ;
7982+ _cleanup_free_ struct nvme_nvm_id_ns * nvm_ns = NULL ;
7983+ _cleanup_huge_ struct nvme_mem_huge mh = { 0 , };
7984+ _cleanup_free_ struct nvme_id_ns * ns = NULL ;
7985+ unsigned int logical_block_size = 0 ;
79967986 struct timeval start_time , end_time ;
7997- void * buffer ;
79987987 _cleanup_free_ void * mbuffer = NULL ;
7999- int err = 0 ;
80007988 _cleanup_fd_ int dfd = -1 , mfd = -1 ;
8001- int flags , pi_size ;
8002- int mode = 0644 ;
7989+ __u8 lba_index , sts = 0 , pif = 0 ;
80037990 __u16 control = 0 , nblocks = 0 ;
7991+ struct nvme_passthru_cmd cmd ;
7992+ int flags , pi_size ;
80047993 __u32 dsmgmt = 0 ;
8005- unsigned int logical_block_size = 0 ;
8006- unsigned long long buffer_size = 0 , mbuffer_size = 0 ;
8007- _cleanup_huge_ struct nvme_mem_huge mh = { 0 , };
8008- _cleanup_nvme_global_ctx_ struct nvme_global_ctx * ctx = NULL ;
8009- _cleanup_nvme_transport_handle_ struct nvme_transport_handle * hdl = NULL ;
8010- _cleanup_free_ struct nvme_nvm_id_ns * nvm_ns = NULL ;
8011- _cleanup_free_ struct nvme_id_ns * ns = NULL ;
8012- __u8 lba_index , sts = 0 , pif = 0 ;
7994+ int mode = 0644 ;
7995+ void * buffer ;
7996+ int err = 0 ;
80137997 __u16 ms ;
80147998
80157999 const char * start_block_addr = "64-bit addr of first block to access" ;
@@ -8304,30 +8288,26 @@ static int submit_io(int opcode, char *command, const char *desc, int argc, char
83048288 if (nvme_cfg .dry_run )
83058289 return 0 ;
83068290
8307- struct nvme_io_args args = {
8308- .args_size = sizeof (args ),
8309- .nsid = cfg .namespace_id ,
8310- .slba = cfg .start_block ,
8311- .nlb = nblocks ,
8312- .control = control ,
8313- .dsm = cfg .dsmgmt ,
8314- .sts = sts ,
8315- .pif = pif ,
8316- .dspec = cfg .dspec ,
8317- .reftag = (__u32 )cfg .ref_tag ,
8318- .reftag_u64 = cfg .ref_tag ,
8319- .apptag = cfg .app_tag ,
8320- .appmask = cfg .app_tag_mask ,
8321- .storage_tag = cfg .storage_tag ,
8322- .data_len = buffer_size ,
8323- .data = buffer ,
8324- .metadata_len = mbuffer_size ,
8325- .metadata = mbuffer ,
8326- .timeout = nvme_cfg .timeout ,
8327- .result = NULL ,
8328- };
8291+ nvme_init_io (& cmd , opcode , cfg .namespace_id , cfg .start_block , buffer ,
8292+ buffer_size , mbuffer , mbuffer_size );
8293+ cmd .cdw12 = NVME_FIELD_ENCODE (nblocks ,
8294+ NVME_IOCS_COMMON_CDW12_NLB_SHIFT ,
8295+ NVME_IOCS_COMMON_CDW12_NLB_MASK ) |
8296+ NVME_FIELD_ENCODE (control ,
8297+ NVME_IOCS_COMMON_CDW12_CONTROL_SHIFT ,
8298+ NVME_IOCS_COMMON_CDW12_CONTROL_MASK );
8299+ cmd .cdw13 = NVME_FIELD_ENCODE (cfg .dspec ,
8300+ NVME_IOCS_COMMON_CDW13_DSPEC_SHIFT ,
8301+ NVME_IOCS_COMMON_CDW13_DSPEC_MASK ) |
8302+ NVME_FIELD_ENCODE (cfg .dsmgmt ,
8303+ NVME_IOCS_COMMON_CDW13_DSM_SHIFT ,
8304+ NVME_IOCS_COMMON_CDW13_DSM_MASK );
8305+ nvme_init_var_size_tags ((struct nvme_passthru_cmd64 * )& cmd , pif , sts ,
8306+ cfg .ref_tag , cfg .storage_tag );
8307+ nvme_init_app_tag ((struct nvme_passthru_cmd64 * )& cmd , cfg .app_tag ,
8308+ cfg .app_tag_mask );
83298309 gettimeofday (& start_time , NULL );
8330- err = nvme_io (hdl , & args , opcode );
8310+ err = nvme_submit_admin_passthru (hdl , & cmd , NULL );
83318311 gettimeofday (& end_time , NULL );
83328312 if (cfg .latency )
83338313 printf (" latency: %s: %llu us\n" , command , elapsed_utime (start_time , end_time ));
@@ -8385,6 +8365,7 @@ static int verify_cmd(int argc, char **argv, struct command *acmd, struct plugin
83858365 _cleanup_free_ struct nvme_id_ns * ns = NULL ;
83868366 _cleanup_nvme_global_ctx_ struct nvme_global_ctx * ctx = NULL ;
83878367 _cleanup_nvme_transport_handle_ struct nvme_transport_handle * hdl = NULL ;
8368+ struct nvme_passthru_cmd cmd ;
83888369 __u8 sts = 0 , pif = 0 ;
83898370 __u16 control = 0 ;
83908371 int err ;
@@ -8486,23 +8467,13 @@ static int verify_cmd(int argc, char **argv, struct command *acmd, struct plugin
84868467 if (invalid_tags (cfg .storage_tag , cfg .ref_tag , sts , pif ))
84878468 return - EINVAL ;
84888469
8489- struct nvme_io_args args = {
8490- .args_size = sizeof (args ),
8491- .nsid = cfg .namespace_id ,
8492- .slba = cfg .start_block ,
8493- .nlb = cfg .block_count ,
8494- .control = control ,
8495- .reftag = cfg .ref_tag ,
8496- .reftag_u64 = cfg .ref_tag ,
8497- .apptag = cfg .app_tag ,
8498- .appmask = cfg .app_tag_mask ,
8499- .sts = sts ,
8500- .pif = pif ,
8501- .storage_tag = cfg .storage_tag ,
8502- .timeout = nvme_cfg .timeout ,
8503- .result = NULL ,
8504- };
8505- err = nvme_verify (hdl , & args );
8470+ nvme_init_verify (& cmd , cfg .namespace_id , cfg .start_block ,
8471+ cfg .block_count , control , 0 , NULL , 0 , NULL , 0 );
8472+ nvme_init_var_size_tags ((struct nvme_passthru_cmd64 * )& cmd , pif , sts ,
8473+ cfg .ref_tag , cfg .storage_tag );
8474+ nvme_init_app_tag ((struct nvme_passthru_cmd64 * )& cmd , cfg .app_tag ,
8475+ cfg .app_tag_mask );
8476+ err = nvme_submit_admin_passthru (hdl , & cmd , NULL );
85068477 if (err < 0 )
85078478 nvme_show_error ("verify: %s" , nvme_strerror (err ));
85088479 else if (err != 0 )
0 commit comments