Accepting request 234165 from home:hreinecke:branches:Base:System

- 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

OBS-URL: https://build.opensuse.org/request/show/234165
OBS-URL: https://build.opensuse.org/package/show/Base:System/sg3_utils?expand=0&rev=37
This commit is contained in:
Tomáš Chvátal 2014-05-19 13:40:10 +00:00 committed by Git OBS Bridge
parent 27715e75b9
commit 70eeca64ef
4 changed files with 319 additions and 1 deletions

View File

@ -0,0 +1,53 @@
From 96300d5e6d62a9fd64183fe6c13a5227d07c6b1f Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
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 <hare@suse.de>
---
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

View File

@ -0,0 +1,251 @@
From 880ad9e51b2a2e1f3a8feb0c8e0bb4b5b840a7a3 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
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 <hare@suse.de>
---
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

View File

@ -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

View File

@ -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