@@ -52,6 +52,22 @@ static const char *power_limit_feat = "power limit feature";
5252static const char * power_thresh_feat = "power threshold feature" ;
5353static const char * power_meas_feat = "power measurement feature" ;
5454
55+ static void show_error (int err , const char * fmt , ...)
56+ {
57+ va_list ap ;
58+
59+ _cleanup_free_ char * msg = NULL ;
60+
61+ va_start (ap , fmt );
62+
63+ if (vasprintf (& msg , fmt , ap ) < 0 )
64+ msg = NULL ;
65+
66+ nvme_show_err (msg ? msg : alloc_error , err );
67+
68+ va_end (ap );
69+ }
70+
5571static int feat_get (struct nvme_transport_handle * hdl , const __u8 fid ,
5672 __u32 cdw11 , __u8 sel , __u8 uidx , const char * feat )
5773{
@@ -72,20 +88,18 @@ static int feat_get(struct nvme_transport_handle *hdl, const __u8 fid,
7288
7389 err = nvme_get_features (hdl , 0 , fid , sel , cdw11 , uidx , buf , len ,
7490 & result );
91+ if (err ) {
92+ show_error (err , "Get %s" , feat );
93+ return err ;
94+ }
7595
7696 nvme_show_init ();
7797
78- if (!err ) {
79- nvme_feature_show (fid , sel , result );
80- if (NVME_CHECK (sel , GET_FEATURES_SEL , SUPPORTED ))
81- nvme_show_select_result (fid , result );
82- else
83- nvme_feature_show_fields (fid , result , buf );
84- } else if (err > 0 ) {
85- nvme_show_status (err );
86- } else {
87- nvme_show_error ("Get %s: %s" , feat , nvme_strerror (errno ));
88- }
98+ nvme_feature_show (fid , sel , result );
99+ if (NVME_CHECK (sel , GET_FEATURES_SEL , SUPPORTED ))
100+ nvme_show_select_result (fid , result );
101+ else
102+ nvme_feature_show_fields (fid , result , buf );
89103
90104 nvme_show_finish ();
91105
@@ -102,17 +116,16 @@ static int power_mgmt_set(struct nvme_transport_handle *hdl, const __u8 fid,
102116 err = nvme_set_features (hdl , 0 , fid , sv , cdw11 , 0 , 0 , 0 , 0 , NULL , 0 ,
103117 & result );
104118
119+ if (err ) {
120+ show_error (err , "Set %s" , power_mgmt_feat );
121+ return err ;
122+ }
123+
105124 nvme_show_init ();
106125
107- if (err > 0 ) {
108- nvme_show_status (err );
109- } else if (err < 0 ) {
110- nvme_show_perror ("Set %s" , power_mgmt_feat );
111- } else {
112- nvme_show_result ("Set %s: 0x%04x (%s)" , power_mgmt_feat , cdw11 ,
113- sv ? "Save" : "Not save" );
114- nvme_feature_show_fields (fid , cdw11 , NULL );
115- }
126+ nvme_show_result ("Set %s: 0x%04x (%s)" , power_mgmt_feat , cdw11 ,
127+ sv ? "Save" : "Not save" );
128+ nvme_feature_show_fields (fid , cdw11 , NULL );
116129
117130 nvme_show_finish ();
118131
@@ -194,18 +207,16 @@ static int perfc_set(struct nvme_transport_handle *hdl, __u8 fid, __u32 cdw11,
194207
195208 err = nvme_set_features (hdl , 0 , fid , sv , cdw11 , 0 , 0 , 0 , 0 , & data ,
196209 sizeof (data ), & result );
210+ if (err ) {
211+ show_error (err , "Set %s" , perfc_feat );
212+ return err ;
213+ }
197214
198215 nvme_show_init ();
199216
200- if (err > 0 ) {
201- nvme_show_status (err );
202- } else if (err < 0 ) {
203- nvme_show_perror ("Set %s" , perfc_feat );
204- } else {
205- nvme_show_result ("Set %s: 0x%04x (%s)" , perfc_feat , cdw11 ,
206- sv ? "Save" : "Not save" );
207- nvme_feature_show_fields (fid , cdw11 , NULL );
208- }
217+ nvme_show_result ("Set %s: 0x%04x (%s)" , perfc_feat , cdw11 ,
218+ sv ? "Save" : "Not save" );
219+ nvme_feature_show_fields (fid , cdw11 , NULL );
209220
210221 nvme_show_finish ();
211222
@@ -266,18 +277,16 @@ static int hctm_set(struct nvme_transport_handle *hdl, const __u8 fid,
266277
267278 err = nvme_set_features (hdl , 0 , fid , sv , cdw11 , 0 , 0 , 0 , 0 , NULL , 0 ,
268279 & result );
280+ if (err ) {
281+ show_error (err , "Set %s" , hctm_feat );
282+ return err ;
283+ }
269284
270285 nvme_show_init ();
271286
272- if (err > 0 ) {
273- nvme_show_status (err );
274- } else if (err < 0 ) {
275- nvme_show_perror ("Set %s" , hctm_feat );
276- } else {
277- nvme_show_result ("Set %s: 0x%04x (%s)" , hctm_feat , cdw11 ,
278- sv ? "Save" : "Not save" );
279- nvme_feature_show_fields (fid , cdw11 , NULL );
280- }
287+ nvme_show_result ("Set %s: 0x%04x (%s)" , hctm_feat , cdw11 ,
288+ sv ? "Save" : "Not save" );
289+ nvme_feature_show_fields (fid , cdw11 , NULL );
281290
282291 nvme_show_finish ();
283292
@@ -330,17 +339,16 @@ static int timestamp_set(struct nvme_transport_handle *hdl, const __u8 fid,
330339
331340 err = nvme_set_features (hdl , 0 , fid , sv , 0 , 0 , 0 , 0 , 0 , & ts , sizeof (ts ),
332341 & result );
342+ if (err ) {
343+ show_error (err , "Set %s" , timestamp_feat );
344+ return err ;
345+ }
333346
334347 nvme_show_init ();
335348
336- if (err > 0 ) {
337- nvme_show_status (err );
338- } else if (err < 0 ) {
339- nvme_show_perror ("Set %s" , timestamp_feat );
340- } else {
341- nvme_show_result ("Set %s: (%s)" , timestamp_feat , sv ? "Save" : "Not save" );
342- nvme_feature_show_fields (fid , 0 , (unsigned char * )& ts );
343- }
349+ nvme_show_result ("Set %s: (%s)" , timestamp_feat ,
350+ sv ? "Save" : "Not save" );
351+ nvme_feature_show_fields (fid , 0 , (unsigned char * )& ts );
344352
345353 nvme_show_finish ();
346354
@@ -409,20 +417,19 @@ static int temp_thresh_set(struct nvme_transport_handle *hdl, const __u8 fid,
409417 nvme_init_set_features_temp_thresh (& cmd , sv , cfg -> tmpth , cfg -> tmpsel ,
410418 cfg -> thsel , cfg -> tmpthh );
411419 err = nvme_submit_admin_passthru (hdl , & cmd );
420+ if (err ) {
421+ show_error (err , "Set %s" , temp_thresh_feat );
422+ return err ;
423+ }
412424
413425 nvme_show_init ();
414426
415- if (err > 0 ) {
416- nvme_show_status (err );
417- } else if (err < 0 ) {
418- nvme_show_perror ("Set %s" , temp_thresh_feat );
419- } else {
420- nvme_show_result ("Set %s: (%s)" , temp_thresh_feat , sv ? "Save" : "Not save" );
421- nvme_feature_show_fields (fid , NVME_SET (cfg -> tmpth , FEAT_TT_TMPTH ) |
422- NVME_SET (cfg -> tmpsel , FEAT_TT_TMPSEL ) |
423- NVME_SET (cfg -> thsel , FEAT_TT_THSEL ) |
424- NVME_SET (cfg -> tmpthh , FEAT_TT_TMPTHH ), NULL );
425- }
427+ nvme_show_result ("Set %s: (%s)" , temp_thresh_feat ,
428+ sv ? "Save" : "Not save" );
429+ nvme_feature_show_fields (fid , NVME_SET (cfg -> tmpth , FEAT_TT_TMPTH ) |
430+ NVME_SET (cfg -> tmpsel , FEAT_TT_TMPSEL ) |
431+ NVME_SET (cfg -> thsel , FEAT_TT_THSEL ) |
432+ NVME_SET (cfg -> tmpthh , FEAT_TT_TMPTHH ), NULL );
426433
427434 nvme_show_finish ();
428435
@@ -496,20 +503,21 @@ static int arbitration_set(struct nvme_transport_handle *hdl, const __u8 fid,
496503 nvme_init_set_features_arbitration (& cmd , sv , cfg -> ab , cfg -> lpw ,
497504 cfg -> mpw , cfg -> hpw );
498505 err = nvme_submit_admin_passthru (hdl , & cmd );
506+ if (err ) {
507+ show_error (err , "Set %s" , arbitration_feat );
508+ return err ;
509+ }
499510
500511 nvme_show_init ();
501512
502- if (err > 0 ) {
503- nvme_show_status (err );
504- } else if (err < 0 ) {
505- nvme_show_perror ("Set %s" , arbitration_feat );
506- } else {
507- nvme_show_result ("Set %s: (%s)" , arbitration_feat , sv ? "Save" : "Not save" );
508- nvme_feature_show_fields (fid , NVME_SET (cfg -> ab , FEAT_ARBITRATION_BURST ) |
509- NVME_SET (cfg -> lpw , FEAT_ARBITRATION_LPW ) |
510- NVME_SET (cfg -> mpw , FEAT_ARBITRATION_MPW ) |
511- NVME_SET (cfg -> hpw , FEAT_ARBITRATION_HPW ), NULL );
512- }
513+ nvme_show_result ("Set %s: (%s)" , arbitration_feat ,
514+ sv ? "Save" : "Not save" );
515+ nvme_feature_show_fields (fid ,
516+ NVME_SET (cfg -> ab , FEAT_ARBITRATION_BURST ) |
517+ NVME_SET (cfg -> lpw , FEAT_ARBITRATION_LPW ) |
518+ NVME_SET (cfg -> mpw , FEAT_ARBITRATION_MPW ) |
519+ NVME_SET (cfg -> hpw , FEAT_ARBITRATION_HPW ),
520+ NULL );
513521
514522 nvme_show_finish ();
515523
@@ -555,18 +563,16 @@ static int volatile_wc_set(struct nvme_transport_handle *hdl, const __u8 fid,
555563
556564 err = nvme_set_features (hdl , 0 , fid , sv , cdw11 , 0 , 0 , 0 , 0 , NULL , 0 ,
557565 & result );
566+ if (err ) {
567+ show_error (err , "Set %s" , volatile_wc_feat );
568+ return err ;
569+ }
558570
559571 nvme_show_init ();
560572
561- if (err > 0 ) {
562- nvme_show_status (err );
563- } else if (err < 0 ) {
564- nvme_show_perror ("Set %s" , volatile_wc_feat );
565- } else {
566- nvme_show_result ("Set %s: 0x%04x (%s)" , volatile_wc_feat , cdw11 ,
567- sv ? "Save" : "Not save" );
568- nvme_feature_show_fields (fid , cdw11 , NULL );
569- }
573+ nvme_show_result ("Set %s: 0x%04x (%s)" , volatile_wc_feat , cdw11 ,
574+ sv ? "Save" : "Not save" );
575+ nvme_feature_show_fields (fid , cdw11 , NULL );
570576
571577 nvme_show_finish ();
572578
@@ -614,18 +620,16 @@ static int power_limit_set(struct nvme_transport_handle *hdl, const __u8 fid,
614620
615621 err = nvme_set_features (hdl , 0 , fid , sv , 0 , 0 , cdw13 , uidx , 0 , NULL , 0 ,
616622 & result );
623+ if (err ) {
624+ show_error (err , "Set %s" , power_limit_feat );
625+ return err ;
626+ }
617627
618628 nvme_show_init ();
619629
620- if (err > 0 ) {
621- nvme_show_status (err );
622- } else if (err < 0 ) {
623- nvme_show_perror ("Set %s" , power_limit_feat );
624- } else {
625- nvme_show_result ("Set %s: 0x%04x (%s)" , power_limit_feat , cdw13 ,
626- sv ? "Save" : "Not save" );
627- nvme_feature_show_fields (fid , cdw13 , NULL );
628- }
630+ nvme_show_result ("Set %s: 0x%04x (%s)" , power_limit_feat , cdw13 ,
631+ sv ? "Save" : "Not save" );
632+ nvme_feature_show_fields (fid , cdw13 , NULL );
629633
630634 nvme_show_finish ();
631635
@@ -686,18 +690,16 @@ static int power_thresh_set(struct nvme_transport_handle *hdl, const __u8 fid,
686690
687691 err = nvme_set_features (hdl , 0 , fid , sv , cdw11 , 0 , 0 , uidx , 0 , NULL , 0 ,
688692 & result );
693+ if (err ) {
694+ show_error (err , "Set %s" , power_thresh_feat );
695+ return err ;
696+ }
689697
690698 nvme_show_init ();
691699
692- if (err > 0 ) {
693- nvme_show_status (err );
694- } else if (err < 0 ) {
695- nvme_show_perror ("Set %s" , power_thresh_feat );
696- } else {
697- nvme_show_result ("Set %s: 0x%04x (%s)" , power_thresh_feat ,
698- cdw11 , sv ? "Save" : "Not save" );
699- nvme_feature_show_fields (fid , cdw11 , NULL );
700- }
700+ nvme_show_result ("Set %s: 0x%04x (%s)" , power_thresh_feat ,
701+ cdw11 , sv ? "Save" : "Not save" );
702+ nvme_feature_show_fields (fid , cdw11 , NULL );
701703
702704 nvme_show_finish ();
703705
@@ -766,18 +768,16 @@ static int power_meas_set(struct nvme_transport_handle *hdl, const __u8 fid,
766768
767769 err = nvme_set_features (hdl , 0 , fid , sv , cdw11 , 0 , 0 , uidx , 0 , NULL , 0 ,
768770 & result );
771+ if (err ) {
772+ show_error (err , "Set %s" , power_meas_feat );
773+ return err ;
774+ }
769775
770776 nvme_show_init ();
771777
772- if (err > 0 ) {
773- nvme_show_status (err );
774- } else if (err < 0 ) {
775- nvme_show_perror ("Set %s" , power_meas_feat );
776- } else {
777- nvme_show_result ("Set %s: 0x%04x (%s)" , power_meas_feat , cdw11 ,
778- sv ? "Save" : "Not save" );
779- nvme_feature_show_fields (fid , cdw11 , NULL );
780- }
778+ nvme_show_result ("Set %s: 0x%04x (%s)" , power_meas_feat , cdw11 ,
779+ sv ? "Save" : "Not save" );
780+ nvme_feature_show_fields (fid , cdw11 , NULL );
781781
782782 nvme_show_finish ();
783783
0 commit comments