aboutsummaryrefslogtreecommitdiff
path: root/src/sg_sat_identify.c
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2014-05-15 15:54:06 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2014-05-15 15:54:06 +0000
commit8f71009943ab70edea7efddcae4df79d82c21acf (patch)
treefe8085ccc1cdfea6e83c43b9f4a74f8ff4c360af /src/sg_sat_identify.c
parentb3db8c0bc921230b4287be7962a4e3603039b4d2 (diff)
downloadsg3_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.c29
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)