sg_cmds_extra.c (sg3_utils-1.47r908.tgz) | : | sg_cmds_extra.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 | |||
*/ | */ | |||
#include <stdio.h> | #include <stdio.h> | |||
#include <stdlib.h> | #include <stdlib.h> | |||
#include <stdarg.h> | #include <stdarg.h> | |||
skipping to change at line 150 | skipping to change at line 150 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, getLbaStatCmd, sizeof(getLbaStatCmd)); | set_scsi_pt_cdb(ptvp, getLbaStatCmd, sizeof(getLbaStatCmd)); | |||
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, alloc_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, alloc_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 226 | skipping to change at line 229 | |||
b)); | b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, gls32_cmd, sizeof(gls32_cmd)); | set_scsi_pt_cdb(ptvp, gls32_cmd, sizeof(gls32_cmd)); | |||
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, alloc_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, alloc_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 296 | skipping to change at line 302 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rtpg_cdb, sizeof(rtpg_cdb)); | set_scsi_pt_cdb(ptvp, rtpg_cdb, sizeof(rtpg_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 360 | skipping to change at line 369 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, stpg_cdb, sizeof(stpg_cdb)); | set_scsi_pt_cdb(ptvp, stpg_cdb, sizeof(stpg_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 412 | skipping to change at line 424 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, repRef_cdb, sizeof(repRef_cdb)); | set_scsi_pt_cdb(ptvp, repRef_cdb, sizeof(repRef_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 512 | skipping to change at line 527 | |||
} else { | } else { | |||
ptvp = construct_scsi_pt_obj_with_fd(sg_fd, vb); | ptvp = construct_scsi_pt_obj_with_fd(sg_fd, vb); | |||
if (NULL == ptvp) | if (NULL == ptvp) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, senddiag_cdb, sizeof(senddiag_cdb)); | set_scsi_pt_cdb(ptvp, senddiag_cdb, sizeof(senddiag_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, -1, tmout, vb); | res = do_scsi_pt(ptvp, -1, tmout, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 616 | skipping to change at line 634 | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rcvdiag_cdb, sizeof(rcvdiag_cdb)); | set_scsi_pt_cdb(ptvp, rcvdiag_cdb, sizeof(rcvdiag_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, -1, timeout_secs, vb); | res = do_scsi_pt(ptvp, -1, timeout_secs, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 722 | skipping to change at line 743 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rdef_cdb, sizeof(rdef_cdb)); | set_scsi_pt_cdb(ptvp, rdef_cdb, sizeof(rdef_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 782 | skipping to change at line 806 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rmsn_cdb, sizeof(rmsn_cdb)); | set_scsi_pt_cdb(ptvp, rmsn_cdb, sizeof(rmsn_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 845 | skipping to change at line 872 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rii_cdb, sizeof(rii_cdb)); | set_scsi_pt_cdb(ptvp, rii_cdb, sizeof(rii_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, max_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, max_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 911 | skipping to change at line 941 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, sii_cdb, sizeof(sii_cdb)); | set_scsi_pt_cdb(ptvp, sii_cdb, sizeof(sii_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 1004 | skipping to change at line 1037 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, fu_cdb, sizeof(fu_cdb)); | set_scsi_pt_cdb(ptvp, fu_cdb, sizeof(fu_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, tmout, vb); | res = do_scsi_pt(ptvp, sg_fd, tmout, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 1059 | skipping to change at line 1095 | |||
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 sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, reass_cdb, sizeof(reass_cdb)); | set_scsi_pt_cdb(ptvp, reass_cdb, sizeof(reass_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 1111 | skipping to change at line 1150 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, prin_cdb, sizeof(prin_cdb)); | set_scsi_pt_cdb(ptvp, prin_cdb, sizeof(prin_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 1180 | skipping to change at line 1222 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, prout_cdb, sizeof(prout_cdb)); | set_scsi_pt_cdb(ptvp, prout_cdb, sizeof(prout_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 1256 | skipping to change at line 1301 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, readLong_cdb, sizeof(readLong_cdb)); | set_scsi_pt_cdb(ptvp, readLong_cdb, sizeof(readLong_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, xfer_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, xfer_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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; | |||
case SG_LIB_CAT_ILLEGAL_REQ: | case SG_LIB_CAT_ILLEGAL_REQ: | |||
{ | { | |||
bool valid, ili; | bool valid, ili; | |||
int slen; | int slen; | |||
uint64_t ull = 0; | uint64_t ull = 0; | |||
skipping to change at line 1346 | skipping to change at line 1394 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, readLong_cdb, sizeof(readLong_cdb)); | set_scsi_pt_cdb(ptvp, readLong_cdb, sizeof(readLong_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, xfer_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, xfer_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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; | |||
case SG_LIB_CAT_ILLEGAL_REQ: | case SG_LIB_CAT_ILLEGAL_REQ: | |||
{ | { | |||
bool valid, ili; | bool valid, ili; | |||
int slen; | int slen; | |||
uint64_t ull = 0; | uint64_t ull = 0; | |||
skipping to change at line 1437 | skipping to change at line 1488 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, writeLong_cdb, sizeof(writeLong_cdb)); | set_scsi_pt_cdb(ptvp, writeLong_cdb, sizeof(writeLong_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 *)data_out, xfer_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)data_out, xfer_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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; | |||
case SG_LIB_CAT_ILLEGAL_REQ: | case SG_LIB_CAT_ILLEGAL_REQ: | |||
{ | { | |||
int valid, slen, ili; | int valid, slen, ili; | |||
uint64_t ull = 0; | uint64_t ull = 0; | |||
skipping to change at line 1517 | skipping to change at line 1571 | |||
false, sizeof(b), b)); | false, sizeof(b), b)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, writeLong_cdb, sizeof(writeLong_cdb)); | set_scsi_pt_cdb(ptvp, writeLong_cdb, sizeof(writeLong_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 *)data_out, xfer_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)data_out, xfer_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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; | |||
case SG_LIB_CAT_ILLEGAL_REQ: | case SG_LIB_CAT_ILLEGAL_REQ: | |||
{ | { | |||
bool valid, ili; | bool valid, ili; | |||
int slen; | int slen; | |||
uint64_t ull = 0; | uint64_t ull = 0; | |||
skipping to change at line 1602 | skipping to change at line 1659 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, v_cdb, sizeof(v_cdb)); | set_scsi_pt_cdb(ptvp, v_cdb, sizeof(v_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
if (data_out_len > 0) | if (data_out_len > 0) | |||
set_scsi_pt_data_out(ptvp, (uint8_t *)data_out, data_out_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)data_out, data_out_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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; | |||
case SG_LIB_CAT_MEDIUM_HARD: | case SG_LIB_CAT_MEDIUM_HARD: | |||
{ | { | |||
bool valid; | bool valid; | |||
uint64_t ull = 0; | uint64_t ull = 0; | |||
skipping to change at line 1681 | skipping to change at line 1741 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | if (NULL == ((ptvp = create_pt_obj(cdb_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, v_cdb, sizeof(v_cdb)); | set_scsi_pt_cdb(ptvp, v_cdb, sizeof(v_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
if (data_out_len > 0) | if (data_out_len > 0) | |||
set_scsi_pt_data_out(ptvp, (uint8_t *)data_out, data_out_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)data_out, data_out_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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; | |||
case SG_LIB_CAT_MEDIUM_HARD: | case SG_LIB_CAT_MEDIUM_HARD: | |||
{ | { | |||
bool valid; | bool valid; | |||
uint64_t ull = 0; | uint64_t ull = 0; | |||
skipping to change at line 1921 | skipping to change at line 1984 | |||
false, sizeof(b), b)); | false, 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, rbuf_cdb, sizeof(rbuf_cdb)); | set_scsi_pt_cdb(ptvp, rbuf_cdb, sizeof(rbuf_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 1994 | skipping to change at line 2060 | |||
} | } | |||
} | } | |||
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, wbuf_cdb, sizeof(wbuf_cdb)); | set_scsi_pt_cdb(ptvp, wbuf_cdb, sizeof(wbuf_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 2071 | skipping to change at line 2140 | |||
ptvp = construct_scsi_pt_obj(); | ptvp = construct_scsi_pt_obj(); | |||
if (NULL == ptvp) { | if (NULL == ptvp) { | |||
pr2ws("%s: out of memory\n", __func__); | pr2ws("%s: out of memory\n", __func__); | |||
return -1; | return -1; | |||
} | } | |||
set_scsi_pt_cdb(ptvp, wbuf_cdb, sizeof(wbuf_cdb)); | set_scsi_pt_cdb(ptvp, wbuf_cdb, sizeof(wbuf_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, timeout_secs, vb); | res = do_scsi_pt(ptvp, sg_fd, timeout_secs, vb); | |||
ret = sg_cmds_process_resp(ptvp, "Write buffer", res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, "Write buffer", res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 2137 | skipping to change at line 2209 | |||
} | } | |||
} | } | |||
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, u_cdb, sizeof(u_cdb)); | set_scsi_pt_cdb(ptvp, u_cdb, sizeof(u_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, tmout, vb); | res = do_scsi_pt(ptvp, sg_fd, tmout, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 2183 | skipping to change at line 2258 | |||
false, sizeof(b), b)); | false, 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, rl_cdb, sizeof(rl_cdb)); | set_scsi_pt_cdb(ptvp, rl_cdb, sizeof(rl_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 2250 | skipping to change at line 2328 | |||
false, sizeof(d), d)); | false, sizeof(d), d)); | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(b)))) | if (NULL == ((ptvp = create_pt_obj(b)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, rcvcopyres_cdb, sizeof(rcvcopyres_cdb)); | set_scsi_pt_cdb(ptvp, rcvcopyres_cdb, sizeof(rcvcopyres_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, b, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, b, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 2308 | skipping to change at line 2389 | |||
} | } | |||
} | } | |||
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, xcopy_cdb, sizeof(xcopy_cdb)); | set_scsi_pt_cdb(ptvp, xcopy_cdb, sizeof(xcopy_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, vb); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, vb); | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 2385 | skipping to change at line 2469 | |||
} | } | |||
} | } | |||
if (NULL == ((ptvp = create_pt_obj(cname)))) | if (NULL == ((ptvp = create_pt_obj(cname)))) | |||
return -1; | return -1; | |||
set_scsi_pt_cdb(ptvp, xcopy_cdb, sizeof(xcopy_cdb)); | set_scsi_pt_cdb(ptvp, xcopy_cdb, sizeof(xcopy_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, tmout, vb); | res = do_scsi_pt(ptvp, sg_fd, tmout, vb); | |||
ret = sg_cmds_process_resp(ptvp, cname, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cname, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
skipping to change at line 2489 | skipping to change at line 2576 | |||
int sstat = get_scsi_pt_status_response(ptvp); | int sstat = get_scsi_pt_status_response(ptvp); | |||
if (SG_LIB_CAT_CONDITION_MET == sstat) { | if (SG_LIB_CAT_CONDITION_MET == sstat) { | |||
ret = SG_LIB_CAT_CONDITION_MET; | ret = SG_LIB_CAT_CONDITION_MET; | |||
if (vb > 2) | if (vb > 2) | |||
pr2ws("%s: returns SG_LIB_CAT_CONDITION_MET\n", __func__); | pr2ws("%s: returns SG_LIB_CAT_CONDITION_MET\n", __func__); | |||
goto fini; | goto fini; | |||
} | } | |||
} | } | |||
ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_cat); | ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, vb, &s_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 (s_cat) { | switch (s_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 = s_cat; | ret = s_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
End of changes. 31 change blocks. | ||||
91 lines changed or deleted | 181 lines changed or added |