diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2014-03-20 00:16:40 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2014-03-20 00:16:40 +0000 |
commit | 8554a0f7b7ae4bd5c9f6094b81202b6009b7c777 (patch) | |
tree | 4a3901248940e2702211725665a699681f3fc7ae | |
parent | 5ba2664a06e6b1b811174b043db1165026158b44 (diff) | |
download | sg3_utils-8554a0f7b7ae4bd5c9f6094b81202b6009b7c777.tar.gz |
sg_logs: placeholder for pending defects lpage; sg_unmap: fix another problem with --grpnum= option; sg_xcopy tweak
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@560 6180dd3e-e324-4e3e-922d-17de1ae2f315
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | doc/sg3_utils.8 | 6 | ||||
-rw-r--r-- | src/sg_logs.c | 30 | ||||
-rw-r--r-- | src/sg_unmap.c | 4 | ||||
-rw-r--r-- | src/sg_xcopy.c | 25 |
5 files changed, 49 insertions, 20 deletions
@@ -2,7 +2,7 @@ Each utility has its own version number, date of last change and some description at the top of its ".c" file. All utilities in the main directory have their own "man" pages. There is also a sg3_utils man page. -Changelog for sg3_utils-1.38 [20140311] [svn: r559] +Changelog for sg3_utils-1.38 [20140318] [svn: r560] - sg_ses: add --dev-slot-num= and --sas-addr= - fix --data=- problem with large buffers - new --data=@FN to read hex data from file FN @@ -40,6 +40,8 @@ Changelog for sg3_utils-1.38 [20140311] [svn: r559] command line, so multiple arguments are concatenated - sg_write_same: repeat if unit attention - sg_rtpg: fix indexing bug with --extended option + - sg_logs: placeholder for pending defects lpage + - sg_unmap: fix another problem with --grpnum= option - sg_lib.h: add PDT_ZBC define (spc4r36p) - sg_lib_data: sync asc/ascq codes with T10 dated 20140122 - add pdt string for ZBC (spc4r36p) diff --git a/doc/sg3_utils.8 b/doc/sg3_utils.8 index b58e8364..71ba83fc 100644 --- a/doc/sg3_utils.8 +++ b/doc/sg3_utils.8 @@ -232,9 +232,9 @@ the \fIDEVICE\fR reports a miscompare sense key. VERIFY and COMPARE AND WRITE commands may report this. .TP .B 15 -the utility is unable to open, close or use the given \fIDEVICE\fR. -The given file name could be incorrect or there may be permission -problems. Adding the '\-v' option may give more information. +the utility is unable to open, close or use the given \fIDEVICE\fR or some +other file. The given file name could be incorrect or there may be +permission problems. Adding the '\-v' option may give more information. .TP .B 20 the \fIDEVICE\fR reports it has a check condition but "no sense" diff --git a/src/sg_logs.c b/src/sg_logs.c index e21f75cf..e998dc73 100644 --- a/src/sg_logs.c +++ b/src/sg_logs.c @@ -25,7 +25,7 @@ #include "sg_lib.h" #include "sg_cmds_basic.h" -static const char * version_str = "1.15 20140203"; /* spc4r36p + sbc3r30 */ +static const char * version_str = "1.16 20140314"; /* spc4r36r + sbc4r01 */ #define MX_ALLOC_LEN (0xfffc) #define SHORT_RESP_LEN 128 @@ -743,6 +743,21 @@ show_page_name(int pg_code, int subpg_code, return; } } + if (0x15 == pg_code) { + switch (inq_dat->peripheral_type) { + case PDT_DISK: case PDT_WO: case PDT_OPTICAL: case PDT_RBC: + if (0 == subpg_code) { + printf("%sBackground scan results (sbc-3)\n", b); + return; + } else if (1 == subpg_code) { + printf("%sPending defects (sbc-4)\n", b); + return; + } + break; + default: + break; + } + } if (subpg_code > 0) { printf("%s??\n", b); return; @@ -760,9 +775,7 @@ show_page_name(int pg_code, int subpg_code, case LB_PROV_LPAGE: /* 0xc */ printf("%sLogical block provisioning (sbc-3)\n", b); break; - case 0x15: - printf("%sBackground scan results (sbc-3)\n", b); - break; + /* case 0x15: has subpage in sbc4 */ case SOLID_STATE_MEDIA_LPAGE: /* 0x11 */ printf("%sSolid state media (sbc-3)\n", b); break; @@ -3047,7 +3060,7 @@ static const char * reassign_status[] = { "Logical block unsuccessfully reassigned by application client", /* 8 */ }; -/* Background scan results [0x15] for disk */ +/* Background scan results [0x15,0] for disk */ static void show_background_scan_results_page(unsigned char * resp, int len, int show_pcb, int verbose) @@ -4219,8 +4232,11 @@ show_ascii_page(unsigned char * resp, int len, switch (inq_dat->peripheral_type) { case PDT_DISK: case PDT_WO: case PDT_OPTICAL: case PDT_RBC: /* disk (direct access) type devices */ - show_background_scan_results_page(resp, len, optsp->do_pcb, - optsp->do_verbose); + if (0 == subpg_code) + show_background_scan_results_page(resp, len, + optsp->do_pcb, optsp->do_verbose); + else + done = 0; /* todo: pending defects [0x15,1] */ break; case PDT_MCHANGER: /* smc-3 */ show_element_stats_page(resp, len, optsp->do_pcb); diff --git a/src/sg_unmap.c b/src/sg_unmap.c index 22b2b9db..3da7ddc4 100644 --- a/src/sg_unmap.c +++ b/src/sg_unmap.c @@ -30,7 +30,7 @@ * logical blocks. */ -static const char * version_str = "1.05 20140203"; +static const char * version_str = "1.06 20140318"; #define DEF_TIMEOUT_SECS 60 @@ -392,7 +392,7 @@ main(int argc, char * argv[]) break; case 'g': num = sscanf(optarg, "%d", &res); - if ((1 == num) && ((res < 0) || (res > 31))) + if ((1 == num) && (res >= 0) && (res <= 31)) grpnum = res; else { pr2serr("value for '--grpnum=' must be 0 to 31\n"); diff --git a/src/sg_xcopy.c b/src/sg_xcopy.c index 7aaa2c91..42e23897 100644 --- a/src/sg_xcopy.c +++ b/src/sg_xcopy.c @@ -62,7 +62,7 @@ #include "sg_cmds_extra.h" #include "sg_io_linux.h" -static const char * version_str = "0.43 20140308"; +static const char * version_str = "0.44 20140312"; #define ME "sg_xcopy: " @@ -308,6 +308,8 @@ find_bsg_major(void) fclose(fp); } +/* Returns a file descriptor on success (0 or greater), -1 for an open + * error, -2 for a standard INQUIRY problem. */ static int open_sg(struct xcopy_fp_t * fp, int verbose) { @@ -353,7 +355,7 @@ open_sg(struct xcopy_fp_t * fp, int verbose) pr2serr("INQUIRY failed on %s\n", ebuff); sg_cmds_close_device(fp->sg_fd); fp->sg_fd = -1; - return fp->sg_fd; + return -2; } fp->pdt = sir.peripheral_type; @@ -1788,11 +1790,20 @@ main(int argc, char * argv[]) return SG_LIB_FILE_ERROR; } - if (open_sg(&ixcf, verbose) < 0) - return SG_LIB_CAT_INVALID_OP; - - if (open_sg(&oxcf, verbose) < 0) - return SG_LIB_CAT_INVALID_OP; + res = open_sg(&ixcf, verbose); + if (res < 0) { + if (-1 == res) + return SG_LIB_FILE_ERROR; + else + return SG_LIB_CAT_OTHER; + } + res = open_sg(&oxcf, verbose); + if (res < 0) { + if (-1 == res) + return SG_LIB_FILE_ERROR; + else + return SG_LIB_CAT_OTHER; + } if ((STDIN_FILENO == infd) && (STDOUT_FILENO == outfd)) { pr2serr("Can't have both 'if' as stdin _and_ 'of' as stdout\n"); |