Fix a couple of problems in the sa(4) media type reports.

The only drives I have discovered so far that support medium type
reports are newer HP LTO (LTO-5 and LTO-6) drives.  IBM drives
only support the density reports.

sys/cam/scsi/scsi_sa.h:
	The number of possible density codes in the medium type
	report is 9, not 8.  This caused problems parsing all of
	the medium type report after this point in the structure.

usr.bin/mt/mt.c:
	Run the density codes returned in the medium type report
	through denstostring(), just like the primary and secondary
	density codes in the density report.  This will print the
	density code in hex, and give a text description if it
	is available.

Thanks to Rudolf Cejka for doing extensive testing with HP LTO drives
and Bacula and discovering these problems.

Tested by:	Rudolf Cejka <cejkar at fit.vutbr.cz>
Sponsored by:	Spectra Logic
MFC after:	4 days
This commit is contained in:
Kenneth D. Merry 2015-03-18 20:52:34 +00:00
parent bff38d637c
commit 74a177ac50
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=280230
2 changed files with 3 additions and 3 deletions

View File

@ -477,7 +477,7 @@ struct scsi_medium_type_data {
u_int8_t length[2];
#define SMTD_DEFAULT_LENGTH 52
u_int8_t num_density_codes;
u_int8_t primary_density_codes[8];
u_int8_t primary_density_codes[9];
u_int8_t media_width[2];
u_int8_t medium_length[2];
u_int8_t reserved2[2];

View File

@ -1406,9 +1406,9 @@ mt_print_density_entry(struct mt_status_entry *density_root, int indent)
continue;
}
if ((strcmp(entry->entry_name, "primary_density_code") == 0)
|| (strcmp(entry->entry_name, "secondary_density_code") == 0)){
|| (strcmp(entry->entry_name, "secondary_density_code") == 0)
|| (strcmp(entry->entry_name, "density_code") == 0)) {
/* XXX KDM this should really be unsigned */
printf("%*s%s (%s): %s\n", indent, "", entry->desc ?
entry->desc : "", entry->entry_name,
denstostring(entry->value_unsigned));