diff --git a/0003-sg_inq-compability-links-for-ata_id.patch b/0003-sg_inq-compability-links-for-ata_id.patch new file mode 100644 index 0000000..b702d1b --- /dev/null +++ b/0003-sg_inq-compability-links-for-ata_id.patch @@ -0,0 +1,53 @@ +From 96300d5e6d62a9fd64183fe6c13a5227d07c6b1f Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 8 May 2014 15:59:33 +0200 +Subject: sg_inq: compability links for ata_id + +The original 'ata_id' program would return the data provided by +the 'IDENTIFY' ATA command. +As the 'product' information from the IDENTIFY command is 40 +bytes long it doesn't fit into the 'product' field for the SCSI +inquiry, causing it to be truncated. +So we should be adding another field 'SCSI_IDENT_LUN_ATA' +to provide ata_id compatible information for creating symlinks. + +References: bnc#876344 + +Signed-off-by: Hannes Reinecke +--- + scripts/55-scsi-sg3_id.rules | 3 ++- + src/sg_inq.c | 4 ++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/scripts/55-scsi-sg3_id.rules b/scripts/55-scsi-sg3_id.rules +index 2f99157..ab5a8e3 100644 +--- a/scripts/55-scsi-sg3_id.rules ++++ b/scripts/55-scsi-sg3_id.rules +@@ -25,7 +25,8 @@ ENV{SCSI_IDENT_LUN_NAA}=="?*", ENV{ID_WWN}!="?*", ENV{ID_WWN}="0x$env{SCSI_IDENT + ENV{SCSI_IDENT_LUN_NAA}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA}" + + # ata_id compability +-ENV{ID_SERIAL}!="?*", ENV{SCSI_VENDOR}=="ATA", ENV{ID_BUS}="ata", ENV{ID_ATA}="1", ENV{ID_SERIAL}="$env{SCSI_MODEL}_$env{SCSI_IDENT_LUN_VENDOR}" ++ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_ATA}=="?*", ENV{ID_BUS}="ata", ENV{ID_ATA}="1", ENV{ID_SERIAL}="$env{SCSI_IDENT_LUN_ATA}" ++ENV{ID_SERIAL_SHORT}!="?*", ENV{SCSI_VENDOR}=="ATA", ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_VENDOR}" + # Compat ID_SERIAL setting + ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA}" + ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_EUI64}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="2$env{SCSI_IDENT_LUN_EUI64}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_EUI64}" +diff --git a/src/sg_inq.c b/src/sg_inq.c +index bfa4f58..7d8ada5 100644 +--- a/src/sg_inq.c ++++ b/src/sg_inq.c +@@ -1839,6 +1839,10 @@ export_dev_ids(unsigned char * buff, int len) + if ((2 == c_set) || (3 == c_set)) { + k = encode_whitespaces(ip, i_len); + printf("%.*s\n", k, ip); ++ if (!memcmp(ip, "ATA_", 4)) { ++ printf("SCSI_IDENT_%s_ATA=%.*s\n", assoc_str, ++ k - 4, ip + 4); ++ } + } else { + for (m = 0; m < i_len; ++m) + printf("%02x", (unsigned int)ip[m]); +-- +1.7.12.4 + diff --git a/0004-sg_inq-suppress-warning-messages-for-export.patch b/0004-sg_inq-suppress-warning-messages-for-export.patch new file mode 100644 index 0000000..cad6773 --- /dev/null +++ b/0004-sg_inq-suppress-warning-messages-for-export.patch @@ -0,0 +1,251 @@ +From 880ad9e51b2a2e1f3a8feb0c8e0bb4b5b840a7a3 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 15 May 2014 12:27:22 +0200 +Subject: sg_inq: suppress warning messages for --export + +When called with --export we should just print out the resulting +strings. Printing out warnings in addition just confuses the +caller. And if required the warnings can be enabled by specifying +--verbose. + +References: bnc#876454 + +Signed-off-by: Hannes Reinecke +--- + src/sg_inq.c | 111 +++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 70 insertions(+), 41 deletions(-) + +diff --git a/src/sg_inq.c b/src/sg_inq.c +index 7d8ada5..473d212 100644 +--- a/src/sg_inq.c ++++ b/src/sg_inq.c +@@ -1767,7 +1767,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex) + } + + static void +-export_dev_ids(unsigned char * buff, int len) ++export_dev_ids(unsigned char * buff, int len, int verbose) + { + int u, j, m, id_len, c_set, assoc, desig_type, i_len; + int off, d_id, naa, k, p_id; +@@ -1797,9 +1797,11 @@ export_dev_ids(unsigned char * buff, int len) + i_len = ucp[3]; + id_len = i_len + 4; + if ((off + id_len) > len) { +- pr2serr("Device Identification VPD page error: designator " +- "length longer than\n remaining response length=%d\n", +- (len - off)); ++ if (verbose) ++ pr2serr("Device Identification VPD page error: designator " ++ "length longer than\n remaining response length=%d\n", ++ (len - off)); ++ + return; + } + ip = ucp + 4; +@@ -1819,7 +1821,8 @@ export_dev_ids(unsigned char * buff, int len) + assoc_str = "TARGET"; + break; + default: +- pr2serr(" Invalid association %d\n", assoc); ++ if (verbose) ++ pr2serr(" Invalid association %d\n", assoc); + return; + } + switch (desig_type) { +@@ -1851,8 +1854,10 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 2: /* EUI-64 based */ + if (1 != c_set) { +- pr2serr(" << expected binary code_set (1)>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << expected binary code_set (1)>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + printf("SCSI_IDENT_%s_EUI64=", assoc_str); +@@ -1862,21 +1867,27 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 3: /* NAA */ + if (1 != c_set) { +- pr2serr(" << expected binary code_set (1)>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << expected binary code_set (1)>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + naa = (ip[0] >> 4) & 0xff; + if ((naa < 2) || (naa > 6) || (4 == naa)) { +- pr2serr(" << unexpected naa [0x%x]>>\n", naa); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << unexpected naa [0x%x]>>\n", naa); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + if (6 != naa) { + if (8 != i_len) { +- pr2serr(" << unexpected NAA 2 identifier " +- "length: 0x%x>>\n", i_len); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << unexpected NAA 2 identifier " ++ "length: 0x%x>>\n", i_len); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + printf("SCSI_IDENT_%s_NAA=", assoc_str); +@@ -1885,9 +1896,11 @@ export_dev_ids(unsigned char * buff, int len) + printf("\n"); + } else { /* NAA IEEE Registered extended */ + if (16 != i_len) { +- pr2serr(" << unexpected NAA 6 identifier " +- "length: 0x%x>>\n", i_len); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << unexpected NAA 6 identifier " ++ "length: 0x%x>>\n", i_len); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + printf("SCSI_IDENT_%s_NAA=", assoc_str); +@@ -1898,9 +1911,11 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 4: /* Relative target port */ + if ((1 != c_set) || (1 != assoc) || (4 != i_len)) { +- pr2serr(" << expected binary code_set, target " +- "port association, length 4>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << expected binary code_set, target " ++ "port association, length 4>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + d_id = ((ip[2] << 8) | ip[3]); +@@ -1908,9 +1923,11 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 5: /* (primary) Target port group */ + if ((1 != c_set) || (1 != assoc) || (4 != i_len)) { +- pr2serr(" << expected binary code_set, target " +- "port association, length 4>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << expected binary code_set, target " ++ "port association, length 4>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + d_id = ((ip[2] << 8) | ip[3]); +@@ -1918,9 +1935,11 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 6: /* Logical unit group */ + if ((1 != c_set) || (0 != assoc) || (4 != i_len)) { +- pr2serr(" << expected binary code_set, logical " +- "unit association, length 4>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << expected binary code_set, logical " ++ "unit association, length 4>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + d_id = ((ip[2] << 8) | ip[3]); +@@ -1928,9 +1947,11 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 7: /* MD5 logical unit identifier */ + if ((1 != c_set) || (0 != assoc)) { +- pr2serr(" << expected binary code_set, logical " +- "unit association>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << expected binary code_set, logical " ++ "unit association>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + printf("SCSI_IDENT_%s_MD5=", assoc_str); +@@ -1938,8 +1959,10 @@ export_dev_ids(unsigned char * buff, int len) + break; + case 8: /* SCSI name string */ + if (3 != c_set) { +- pr2serr(" << expected UTF-8 code_set>>\n"); +- dStrHexErr((const char *)ip, i_len, -1); ++ if (verbose) { ++ pr2serr(" << expected UTF-8 code_set>>\n"); ++ dStrHexErr((const char *)ip, i_len, -1); ++ } + break; + } + printf("SCSI_IDENT_%s_NAME=%.*s\n", assoc_str, i_len, +@@ -1948,9 +1971,11 @@ export_dev_ids(unsigned char * buff, int len) + case 9: /* Protocol specific port identifier */ + if (TPROTO_UAS == p_id) { + if ((4 != i_len) || (1 != assoc)) { +- pr2serr(" << UAS (USB) expected target " +- "port association>>\n"); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << UAS (USB) expected target " ++ "port association>>\n"); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + printf("SCSI_IDENT_%s_UAS_DEVICE_ADDRESS=0x%x\n", assoc_str, +@@ -1959,9 +1984,11 @@ export_dev_ids(unsigned char * buff, int len) + ip[2]); + } else if (TPROTO_SOP == p_id) { + if ((4 != i_len) && (8 != i_len)) { /* spc4r36h confused */ +- pr2serr(" << SOP (PCIe) descriptor " +- "length=%d >>\n", i_len); +- dStrHexErr((const char *)ip, i_len, 0); ++ if (verbose) { ++ pr2serr(" << SOP (PCIe) descriptor " ++ "length=%d >>\n", i_len); ++ dStrHexErr((const char *)ip, i_len, 0); ++ } + break; + } + printf("SCSI_IDENT_%s_SOP_ROUTING_ID=0x%x\n", assoc_str, +@@ -1972,12 +1999,14 @@ export_dev_ids(unsigned char * buff, int len) + } + break; + default: /* reserved */ +- pr2serr(" reserved designator=0x%x\n", desig_type); +- dStrHexErr((const char *)ip, i_len, -1); ++ if (verbose) { ++ pr2serr(" reserved designator=0x%x\n", desig_type); ++ dStrHexErr((const char *)ip, i_len, -1); ++ } + break; + } + } +- if (-2 == u) ++ if (-2 == u && verbose) + pr2serr("Device identification VPD page error: " + "around offset=%d\n", off); + } +@@ -3257,7 +3286,7 @@ vpd_decode(int sg_fd, const struct opts_t * op, int inhex_len) + else if (op->do_hex > 2) + dStrHex((const char *)rp, len, -1); + else if (op->do_export) +- export_dev_ids(rp + 4, len - 4); ++ export_dev_ids(rp + 4, len - 4, op->do_verbose); + else + decode_id_vpd(rp, len, op->do_hex); + break; +-- +1.7.12.4 + diff --git a/sg3_utils.changes b/sg3_utils.changes index d8f635c..b89708c 100644 --- a/sg3_utils.changes +++ b/sg3_utils.changes @@ -1,5 +1,15 @@ ------------------------------------------------------------------- -Tue Apr 15 20:11:54 UTC 2014 - spargaonkar@suse.com +Thu May 15 13:34:33 CEST 2014 - hare@suse.de + +- Create compability links for ATA devices (bnc#876344) + Add: + 0003-sg_inq-compability-links-for-ata_id.patch +- Suppress warnings for sg_inq --export (bnc#876454) + Add: + 0004-sg_inq-suppress-warning-messages-for-export.patch + +------------------------------------------------------------------- +Tue Apr 15 16:03:37 UTC 2014 - spargaonkar@suse.com - added patch sginfo-inq-fields-strip-blank.patch sg3_utils: Strip out trailing info from vendor info products fields in inq diff --git a/sg3_utils.spec b/sg3_utils.spec index 491a38c..e57d2f1 100644 --- a/sg3_utils.spec +++ b/sg3_utils.spec @@ -28,6 +28,8 @@ Url: http://sg.danny.cz/sg/sg3_utils.html Source: http://sg.danny.cz/sg/p/%name-%{version}.tar.xz Patch1: 0001-Split-59-scsi-sg_utils.rules-for-multipath-support.patch Patch2: sginfo-inq-fields-strip-blank.patch +Patch3: 0003-sg_inq-compability-links-for-ata_id.patch +Patch4: 0004-sg_inq-suppress-warning-messages-for-export.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: udev BuildRequires: xz @@ -84,6 +86,8 @@ applications that want to make use of libsgutils. %setup -q -n %{name}-%{version} %patch1 -p1 %patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build %configure --disable-static --with-pic