diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2014-05-15 15:54:06 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2014-05-15 15:54:06 +0000 |
commit | 8f71009943ab70edea7efddcae4df79d82c21acf (patch) | |
tree | fe8085ccc1cdfea6e83c43b9f4a74f8ff4c360af /src/sg_sat_identify.c | |
parent | b3db8c0bc921230b4287be7962a4e3603039b4d2 (diff) | |
download | sg3_utils-8f71009943ab70edea7efddcae4df79d82c21acf.tar.gz |
add 'sense' categories for reservation conflict, data protect and protection information violations; add sg_get_category_sense_str() to API
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@577 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_sat_identify.c')
-rw-r--r-- | src/sg_sat_identify.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/sg_sat_identify.c b/src/sg_sat_identify.c index f0213d03..e0daa535 100644 --- a/src/sg_sat_identify.c +++ b/src/sg_sat_identify.c @@ -45,7 +45,7 @@ #define EBUFF_SZ 256 -static const char * version_str = "1.10 20140512"; +static const char * version_str = "1.10 20140515"; static struct option long_options[] = { {"ck_cond", no_argument, 0, 'c'}, @@ -69,7 +69,7 @@ static void usage() "[--ident]\n" " [--len=16|12] [--packet] [--raw] " "[--readonly]\n" - " [--verbose] [--version] DEVICE\n" + " [--verbose] [--version] DEVICE\n" " where:\n" " --ck_cond|-c sets ck_cond bit in cdb (def: 0)\n" " --extend|-e sets extend bit in cdb (def: 0)\n" @@ -223,9 +223,19 @@ static int do_identify_dev(int sg_fd, int do_packet, int cdb_len, "hardware error\n", cdb_len); return SG_LIB_CAT_MEDIUM_HARD; case SPC_SK_ABORTED_COMMAND: - fprintf(stderr, "Aborted command: try again with%s '-p' " - "option\n", (do_packet ? "out" : "")); - return SG_LIB_CAT_ABORTED_COMMAND; + if (0x10 == ssh.asc) { + fprintf(stderr, "Aborted command: protection " + "information\n"); + return SG_LIB_CAT_PROTECTION; + } else { + fprintf(stderr, "Aborted command: try again with%s '-p' " + "option\n", (do_packet ? "out" : "")); + return SG_LIB_CAT_ABORTED_COMMAND; + } + case SPC_SK_DATA_PROTECT: + fprintf(stderr, "ATA PASS-THROUGH (%d): data protect, read " + "only media?\n", cdb_len); + return SG_LIB_CAT_DATA_PROTECT; default: if (verbose < 2) fprintf(stderr, "ATA PASS-THROUGH (%d), some sense " @@ -242,8 +252,13 @@ static int do_identify_dev(int sg_fd, int do_packet, int cdb_len, return SG_LIB_CAT_MALFORMED; } } else if (res > 0) { - fprintf(stderr, "Unexpected SCSI status=0x%x\n", res); - return SG_LIB_CAT_MALFORMED; + if (SAM_STAT_RESERVATION_CONFLICT == res) { + fprintf(stderr, "SCSI status: RESERVATION CONFLICT\n"); + return SG_LIB_CAT_RES_CONFLICT; + } else { + fprintf(stderr, "Unexpected SCSI status=0x%x\n", res); + return SG_LIB_CAT_MALFORMED; + } } else { fprintf(stderr, "ATA pass through (%d) failed\n", cdb_len); if (verbose < 2) |