sg_requests.c (sg3_utils-1.47r908.tgz) | : | sg_requests.c (sg3_utils-1.47r915.tar.xz) | ||
---|---|---|---|---|
skipping to change at line 37 | skipping to change at line 37 | |||
#include "sg_cmds_basic.h" | #include "sg_cmds_basic.h" | |||
#include "sg_pr2serr.h" | #include "sg_pr2serr.h" | |||
#include "sg_pt.h" | #include "sg_pt.h" | |||
/* A utility program for the Linux OS SCSI subsystem. | /* A utility program for the Linux OS SCSI subsystem. | |||
* | * | |||
* | * | |||
* This program issues the SCSI command REQUEST SENSE to the given SCSI device. | * This program issues the SCSI command REQUEST SENSE to the given SCSI device. | |||
*/ | */ | |||
static const char * version_str = "1.36 20210610"; | static const char * version_str = "1.38 20211001"; | |||
#define MAX_REQS_RESP_LEN 255 | #define MAX_REQS_RESP_LEN 255 | |||
#define DEF_REQS_RESP_LEN 252 | #define DEF_REQS_RESP_LEN 252 | |||
#define SENSE_BUFF_LEN 96 /* Arbitrary, could be larger */ | #define SENSE_BUFF_LEN 96 /* Arbitrary, could be larger */ | |||
#define DEF_PT_TIMEOUT 60 /* 60 seconds */ | #define DEF_PT_TIMEOUT 60 /* 60 seconds */ | |||
#define REQUEST_SENSE_CMD 0x3 | #define REQUEST_SENSE_CMD 0x3 | |||
#define REQUEST_SENSE_CMDLEN 6 | #define REQUEST_SENSE_CMDLEN 6 | |||
skipping to change at line 333 | skipping to change at line 333 | |||
pr2serr(" cdb: %s\n", | pr2serr(" cdb: %s\n", | |||
sg_get_command_str(rs_cdb, REQUEST_SENSE_CMDLEN, | sg_get_command_str(rs_cdb, REQUEST_SENSE_CMDLEN, | |||
true, sizeof(bb), bb)); | true, sizeof(bb), bb)); | |||
} | } | |||
rs = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | rs = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | |||
n = sg_cmds_process_resp(ptvp, "Request sense", rs, (0 == k), | n = sg_cmds_process_resp(ptvp, "Request sense", rs, (0 == k), | |||
verbose, &sense_cat); | verbose, &sense_cat); | |||
} | } | |||
if (-1 == n) { | if (-1 == n) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
ret = SG_LIB_TRANSPORT_ERROR; | ||||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
goto finish; | goto finish; | |||
} else if (-2 == n) { | } else if (-2 == n) { | |||
switch (sense_cat) { | switch (sense_cat) { | |||
case SG_LIB_CAT_RECOVERED: | case SG_LIB_CAT_RECOVERED: | |||
case SG_LIB_CAT_NO_SENSE: | case SG_LIB_CAT_NO_SENSE: | |||
break; | break; | |||
case SG_LIB_CAT_NOT_READY: | case SG_LIB_CAT_NOT_READY: | |||
++num_errs; | ++num_errs; | |||
if (1 == num_rs) { | if (1 == num_rs) { | |||
ret = sense_cat; | ret = sense_cat; | |||
skipping to change at line 426 | skipping to change at line 429 | |||
pr2serr(" cdb: %s\n", | pr2serr(" cdb: %s\n", | |||
sg_get_command_str(rs_cdb, REQUEST_SENSE_CMDLEN, | sg_get_command_str(rs_cdb, REQUEST_SENSE_CMDLEN, | |||
true, sizeof(bb), bb)); | true, sizeof(bb), bb)); | |||
} | } | |||
rs = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | rs = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | |||
n = sg_cmds_process_resp(ptvp, "Request sense", rs, (0 == k), | n = sg_cmds_process_resp(ptvp, "Request sense", rs, (0 == k), | |||
verbose, &sense_cat); | verbose, &sense_cat); | |||
} | } | |||
if (-1 == n) { | if (-1 == n) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
ret = SG_LIB_TRANSPORT_ERROR; | ||||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
goto finish; | goto finish; | |||
} else if (-2 == n) { | } else if (-2 == n) { | |||
switch (sense_cat) { | switch (sense_cat) { | |||
case SG_LIB_CAT_RECOVERED: | case SG_LIB_CAT_RECOVERED: | |||
case SG_LIB_CAT_NO_SENSE: | case SG_LIB_CAT_NO_SENSE: | |||
break; | break; | |||
case SG_LIB_CAT_NOT_READY: | case SG_LIB_CAT_NOT_READY: | |||
++num_errs; | ++num_errs; | |||
if (1 == num_rs) { | if (1 == num_rs) { | |||
ret = sense_cat; | ret = sense_cat; | |||
skipping to change at line 474 | skipping to change at line 480 | |||
if (sg_scsi_normalize_sense(rsBuff, act_din_len, &ssh)) { | if (sg_scsi_normalize_sense(rsBuff, act_din_len, &ssh)) { | |||
if (ssh.sense_key > 0) { | if (ssh.sense_key > 0) { | |||
++num_din_errs; | ++num_din_errs; | |||
most_recent_skey = ssh.sense_key; | most_recent_skey = ssh.sense_key; | |||
} | } | |||
if (not_raw_hex && ((1 == num_rs) || verbose)) { | if (not_raw_hex && ((1 == num_rs) || verbose)) { | |||
char bb[144]; | char bb[144]; | |||
sg_get_sense_str(NULL, rsBuff, act_din_len, | sg_get_sense_str(NULL, rsBuff, act_din_len, | |||
false, sizeof(bb), bb); | false, sizeof(bb), bb); | |||
pr2serr("data-in decoded as sense:\n%s\n", b); | pr2serr("data-in decoded as sense:\n%s\n", bb); | |||
} | } | |||
} | } | |||
} | } | |||
partial_clear_scsi_pt_obj(ptvp); | partial_clear_scsi_pt_obj(ptvp); | |||
if (ret) | if (ret) | |||
goto finish; | goto finish; | |||
if (act_din_len > 0) { | if (act_din_len > 0) { | |||
if (do_raw) | if (do_raw) | |||
dStrRaw(rsBuff, act_din_len); | dStrRaw(rsBuff, act_din_len); | |||
End of changes. 4 change blocks. | ||||
4 lines changed or deleted | 10 lines changed or added |