sg_cmds_basic2.c (sg3_utils-1.47r908.tgz) | : | sg_cmds_basic2.c (sg3_utils-1.47r915.tar.xz) | ||
---|---|---|---|---|
/* | /* | |||
* Copyright (c) 1999-2020 Douglas Gilbert. | * Copyright (c) 1999-2021 Douglas Gilbert. | |||
* All rights reserved. | * All rights reserved. | |||
* Use of this source code is governed by a BSD-style | * Use of this source code is governed by a BSD-style | |||
* license that can be found in the BSD_LICENSE file. | * license that can be found in the BSD_LICENSE file. | |||
* | * | |||
* SPDX-License-Identifier: BSD-2-Clause | * SPDX-License-Identifier: BSD-2-Clause | |||
*/ | */ | |||
/* | /* | |||
* CONTENTS | * CONTENTS | |||
* Some SCSI commands are executed in many contexts and hence began | * Some SCSI commands are executed in many contexts and hence began | |||
skipping to change at line 121 | skipping to change at line 121 | |||
pr2ws(" %s cdb: %s\n", cdb_s, | pr2ws(" %s cdb: %s\n", cdb_s, | |||
sg_get_command_str(sc_cdb, SYNCHRONIZE_CACHE_CMDLEN, false, | sg_get_command_str(sc_cdb, SYNCHRONIZE_CACHE_CMDLEN, false, | |||
sizeof(b), b)); | sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, sc_cdb, sizeof(sc_cdb)); | set_scsi_pt_cdb(ptvp, sc_cdb, sizeof(sc_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 174 | skipping to change at line 177 | |||
sg_get_command_str(rc_cdb, SERVICE_ACTION_IN_16_CMDLEN, false, | sg_get_command_str(rc_cdb, SERVICE_ACTION_IN_16_CMDLEN, false, | |||
sizeof(b), b)); | sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, rc_cdb, sizeof(rc_cdb)); | set_scsi_pt_cdb(ptvp, rc_cdb, sizeof(rc_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 224 | skipping to change at line 230 | |||
sg_get_command_str(rc_cdb, READ_CAPACITY_10_CMDLEN, false, | sg_get_command_str(rc_cdb, READ_CAPACITY_10_CMDLEN, false, | |||
sizeof(b), b)); | sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, rc_cdb, sizeof(rc_cdb)); | set_scsi_pt_cdb(ptvp, rc_cdb, sizeof(rc_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 279 | skipping to change at line 288 | |||
sizeof(b), b)); | sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
resid = get_scsi_pt_resid(ptvp); | resid = get_scsi_pt_resid(ptvp); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 379 | skipping to change at line 391 | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
goto gen_err; | goto gen_err; | |||
set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, timeout_secs, verbose); | res = do_scsi_pt(ptvp, sg_fd, timeout_secs, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
resid = get_scsi_pt_resid(ptvp); | resid = get_scsi_pt_resid(ptvp); | |||
if (residp) | if (residp) | |||
*residp = resid; | *residp = resid; | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 463 | skipping to change at line 478 | |||
hex2stderr((const uint8_t *)paramp, param_len, -1); | hex2stderr((const uint8_t *)paramp, param_len, -1); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_out(ptvp, (uint8_t *)paramp, param_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)paramp, param_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 531 | skipping to change at line 549 | |||
hex2stderr((const uint8_t *)paramp, param_len, -1); | hex2stderr((const uint8_t *)paramp, param_len, -1); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | set_scsi_pt_cdb(ptvp, modes_cdb, sizeof(modes_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_out(ptvp, (uint8_t *)paramp, param_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)paramp, param_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 829 | skipping to change at line 850 | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
goto gen_err; | goto gen_err; | |||
set_scsi_pt_cdb(ptvp, logs_cdb, sizeof(logs_cdb)); | set_scsi_pt_cdb(ptvp, logs_cdb, sizeof(logs_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_in(ptvp, resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, timeout_secs, verbose); | res = do_scsi_pt(ptvp, sg_fd, timeout_secs, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
resid = get_scsi_pt_resid(ptvp); | resid = get_scsi_pt_resid(ptvp); | |||
if (residp) | if (residp) | |||
*residp = resid; | *residp = resid; | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 908 | skipping to change at line 932 | |||
hex2stderr(paramp, param_len, -1); | hex2stderr(paramp, param_len, -1); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, logs_cdb, sizeof(logs_cdb)); | set_scsi_pt_cdb(ptvp, logs_cdb, sizeof(logs_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
set_scsi_pt_data_out(ptvp, paramp, param_len); | set_scsi_pt_data_out(ptvp, paramp, param_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 985 | skipping to change at line 1012 | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
} else { | } else { | |||
ptvp = construct_scsi_pt_obj_with_fd(sg_fd, verbose); | ptvp = construct_scsi_pt_obj_with_fd(sg_fd, verbose); | |||
if (NULL == ptvp) | if (NULL == ptvp) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, ssuBlk, sizeof(ssuBlk)); | set_scsi_pt_cdb(ptvp, ssuBlk, sizeof(ssuBlk)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
} | } | |||
res = do_scsi_pt(ptvp, -1, START_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, -1, START_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 1065 | skipping to change at line 1095 | |||
sg_get_command_str(p_cdb, PREVENT_ALLOW_CMDLEN, false, | sg_get_command_str(p_cdb, PREVENT_ALLOW_CMDLEN, false, | |||
sizeof(b), b)); | sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, p_cdb, sizeof(p_cdb)); | set_scsi_pt_cdb(ptvp, p_cdb, sizeof(p_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
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: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
End of changes. 12 change blocks. | ||||
34 lines changed or deleted | 67 lines changed or added |