svn commit: r308425 - head/sys/cam/scsi

Alexander Motin mav at FreeBSD.org
Mon Nov 7 18:21:54 UTC 2016


Author: mav
Date: Mon Nov  7 18:21:53 2016
New Revision: 308425
URL: https://svnweb.freebsd.org/changeset/base/308425

Log:
  Add support for EIIOE flag in Additional Element Status.
  
  It was added in SES-3 spec, and its support required to properly link
  the Additional Element Status page data to the original elements.
  
  MFC after:	2 weeks
  Sponsored by:	iXsystems, Inc.

Modified:
  head/sys/cam/scsi/scsi_enc_ses.c
  head/sys/cam/scsi/scsi_ses.h

Modified: head/sys/cam/scsi/scsi_enc_ses.c
==============================================================================
--- head/sys/cam/scsi/scsi_enc_ses.c	Mon Nov  7 17:38:39 2016	(r308424)
+++ head/sys/cam/scsi/scsi_enc_ses.c	Mon Nov  7 18:21:53 2016	(r308425)
@@ -1758,14 +1758,20 @@ ses_process_elm_addlstatus(enc_softc_t *
 		eip = ses_elm_addlstatus_eip(elm_hdr);
 		if (eip && !ignore_index) {
 			struct ses_elm_addlstatus_eip_hdr *eip_hdr;
-			int expected_index;
+			int expected_index, index;
+			ses_elem_index_type_t index_type;
 
 			eip_hdr = (struct ses_elm_addlstatus_eip_hdr *)elm_hdr;
-			expected_index = iter.individual_element_index;
+			if (eip_hdr->byte2 & SES_ADDL_EIP_EIIOE) {
+				index_type = SES_ELEM_INDEX_GLOBAL;
+				expected_index = iter.global_element_index;
+			} else {
+				index_type = SES_ELEM_INDEX_INDIVIDUAL;
+				expected_index = iter.individual_element_index;
+			}
 			titer = iter;
 			telement = ses_iter_seek_to(&titer,
-						   eip_hdr->element_index,
-						   SES_ELEM_INDEX_INDIVIDUAL);
+			    eip_hdr->element_index, index_type);
 			if (telement != NULL &&
 			    (ses_typehasaddlstatus(enc, titer.type_index) !=
 			     TYPE_ADDLSTATUS_NONE ||
@@ -1775,13 +1781,18 @@ ses_process_elm_addlstatus(enc_softc_t *
 			} else
 				ignore_index = 1;
 
-			if (iter.individual_element_index > expected_index
+			if (eip_hdr->byte2 & SES_ADDL_EIP_EIIOE)
+				index = iter.global_element_index;
+			else
+				index = iter.individual_element_index;
+			if (index > expected_index
 			 && status_type == TYPE_ADDLSTATUS_MANDATORY) {
-				ENC_VLOG(enc, "%s: provided element "
+				ENC_VLOG(enc, "%s: provided %s element"
 					"index %d skips mandatory status "
 					" element at index %d\n",
-					__func__, eip_hdr->element_index,
-					expected_index);
+					__func__, (eip_hdr->byte2 &
+					SES_ADDL_EIP_EIIOE) ? "global " : "",
+					index, expected_index);
 			}
 		}
 		elmpriv = element->elm_private;

Modified: head/sys/cam/scsi/scsi_ses.h
==============================================================================
--- head/sys/cam/scsi/scsi_ses.h	Mon Nov  7 17:38:39 2016	(r308424)
+++ head/sys/cam/scsi/scsi_ses.h	Mon Nov  7 18:21:53 2016	(r308425)
@@ -2413,7 +2413,8 @@ int ses_elm_addlstatus_invalid(struct se
 
 struct ses_elm_addlstatus_eip_hdr {
 	struct ses_elm_addlstatus_base_hdr base;
-	uint8_t reserved;
+	uint8_t byte2;
+#define	SES_ADDL_EIP_EIIOE	1
 	uint8_t element_index;
 	/* NB: This define (currently) applies to all eip=1 headers */
 #define	SES_EIP_HDR_EXTRA_LEN	2


More information about the svn-src-head mailing list