diff options
Diffstat (limited to 'lib/sg_cmds_mmc.c')
-rw-r--r-- | lib/sg_cmds_mmc.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/lib/sg_cmds_mmc.c b/lib/sg_cmds_mmc.c index c1dabd74..e3629559 100644 --- a/lib/sg_cmds_mmc.c +++ b/lib/sg_cmds_mmc.c @@ -84,9 +84,12 @@ sg_ll_set_cd_speed(int sg_fd, int rot_control, int drv_read_speed, set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); - if (-1 == ret) - ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); - else if (-2 == ret) { + if (-1 == ret) { + if (get_scsi_pt_transport_err(ptvp)) + ret = SG_LIB_TRANSPORT_ERROR; + else + ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); + } else if (-2 == ret) { switch (sense_cat) { case SG_LIB_CAT_NOT_READY: case SG_LIB_CAT_UNIT_ATTENTION: @@ -157,9 +160,12 @@ sg_ll_get_config(int sg_fd, int rt, int starting, void * resp, set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); - if (-1 == ret) - ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); - else if (-2 == ret) { + if (-1 == ret) { + if (get_scsi_pt_transport_err(ptvp)) + ret = SG_LIB_TRANSPORT_ERROR; + else + ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); + } else if (-2 == ret) { switch (sense_cat) { case SG_LIB_CAT_INVALID_OP: case SG_LIB_CAT_ILLEGAL_REQ: @@ -250,9 +256,12 @@ sg_ll_get_performance(int sg_fd, int data_type, unsigned int starting_lba, set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); - if (-1 == ret) - ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); - else if (-2 == ret) { + if (-1 == ret) { + if (get_scsi_pt_transport_err(ptvp)) + ret = SG_LIB_TRANSPORT_ERROR; + else + ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); + } else if (-2 == ret) { switch (sense_cat) { case SG_LIB_CAT_INVALID_OP: case SG_LIB_CAT_ILLEGAL_REQ: @@ -332,9 +341,12 @@ sg_ll_set_streaming(int sg_fd, int type, void * paramp, int param_len, set_scsi_pt_data_out(ptvp, (uint8_t *)paramp, param_len); res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); ret = sg_cmds_process_resp(ptvp, cdb_s, res, noisy, verbose, &sense_cat); - if (-1 == ret) - ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); - else if (-2 == ret) { + if (-1 == ret) { + if (get_scsi_pt_transport_err(ptvp)) + ret = SG_LIB_TRANSPORT_ERROR; + else + ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); + } else if (-2 == ret) { switch (sense_cat) { case SG_LIB_CAT_NOT_READY: case SG_LIB_CAT_INVALID_OP: |