changeset 13276:5fc9a1e8f648

429 "iostat -E" does not report serial number... Reviewed by: garrett@nexenta.com Reviewed by: gwr@nexenta.com Approved by: trisk@nexenta.com
author Alexander Eremin <a.eremin@nexenta.com>
date Thu, 27 Jan 2011 18:50:51 +0000
parents 229035fe864a
children 6e9c2509dda5
files usr/src/uts/common/io/scsi/targets/sd.c
diffstat 1 files changed, 15 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/targets/sd.c	Wed Jan 26 19:18:35 2011 -0800
+++ b/usr/src/uts/common/io/scsi/targets/sd.c	Thu Jan 27 18:50:51 2011 +0000
@@ -22,6 +22,9 @@
 /*
  * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved.
  */
+/*
+ * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+ */
 
 /*
  * SCSI disk target driver.
@@ -9105,6 +9108,7 @@
 sd_set_errstats(struct sd_lun *un)
 {
 	struct	sd_errstats	*stp;
+	char 			*sn;
 
 	ASSERT(un != NULL);
 	ASSERT(un->un_errstats != NULL);
@@ -9143,6 +9147,17 @@
 	if (bcmp(&SD_INQUIRY(un)->inq_pid[9], "SUN", 3) == 0) {
 		bcopy(&SD_INQUIRY(un)->inq_serial, stp->sd_serial.value.c,
 		    sizeof (SD_INQUIRY(un)->inq_serial));
+	} else {
+		/*
+		 * Set the "Serial No" kstat for non-Sun qualified drives
+		 */
+		if (ddi_prop_lookup_string(DDI_DEV_T_ANY, SD_DEVINFO(un),
+		    DDI_PROP_NOTPROM | DDI_PROP_DONTPASS,
+		    INQUIRY_SERIAL_NO, &sn) == DDI_SUCCESS) {
+			(void) strlcpy(stp->sd_serial.value.c, sn,
+			    sizeof (stp->sd_serial.value.c));
+			ddi_prop_free(sn);
+		}
 	}
 
 	if (un->un_f_blockcount_is_valid != TRUE) {