summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorasomers <asomers@FreeBSD.org>2016-05-27 22:26:43 +0000
committerasomers <asomers@FreeBSD.org>2016-05-27 22:26:43 +0000
commit9b71bae40e85cea2ab451cf256c287032fc91f2b (patch)
treefe0b779725fef9082a1801a655ee43097a9cc359
parent776954ec8d7bc0477ece739955ad21868c1c9ff6 (diff)
downloadFreeBSD-src-9b71bae40e85cea2ab451cf256c287032fc91f2b.zip
FreeBSD-src-9b71bae40e85cea2ab451cf256c287032fc91f2b.tar.gz
Strip leading spaces off of a SCSI disk's serial number
sys/cam/scsi/scsi_xpt.c Strip leading spaces off of a SCSI disk's reported serial number when populating the CAM serial number. This affects the output of "diskinfo -v" and the names of /dev/diskid/DISK-* device nodes, among other things. SPC5r05 says that the Product Serial Number field from the Unit Serial Number VPD page is right-aligned. So any leading spaces are not part of the actual serial number. Most devices don't left-pad their serial numbers, but some do. In particular, the SN VPD page that an LSI HBA emulates for a SATA drive contains enough left-padding to fill a 20-byte field. UPDATING Add a note to UPDATING, because some users may have to update /etc/fstab or geom labels. Reviewed by: ken, mav MFC after: Never Sponsored by: Spectra Logic Corp Differential Revision: https://reviews.freebsd.org/D6516
-rw-r--r--UPDATING10
-rw-r--r--sys/cam/scsi/scsi_xpt.c21
2 files changed, 25 insertions, 6 deletions
diff --git a/UPDATING b/UPDATING
index df0542d..d28c4b9 100644
--- a/UPDATING
+++ b/UPDATING
@@ -31,6 +31,16 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW:
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20160527:
+ CAM will now strip leading spaces from SCSI disks' serial numbers.
+ This will effect users who create UFS filesystems on SCSI disks using
+ those disk's diskid device nodes. For example, if /etc/fstab
+ previously contained a line like
+ "/dev/diskid/DISK-%20%20%20%20%20%20%20ABCDEFG0123456", you should
+ change it to "/dev/diskid/DISK-ABCDEFG0123456". Users of geom
+ transfers like gmirror may also be affected. ZFS users should
+ generally be fine.
+
20160523:
The bitstring(3) API has been updated with new functionality and
improved performance. But it is binary-incompatible with the old API.
diff --git a/sys/cam/scsi/scsi_xpt.c b/sys/cam/scsi/scsi_xpt.c
index 30a9104..a8684c1 100644
--- a/sys/cam/scsi/scsi_xpt.c
+++ b/sys/cam/scsi/scsi_xpt.c
@@ -1559,13 +1559,22 @@ probe_device_check:
(u_int8_t *)malloc((serial_buf->length + 1),
M_CAMXPT, M_NOWAIT);
if (path->device->serial_num != NULL) {
+ int start, slen;
+
+ start = strspn(serial_buf->serial_num, " ");
+ slen = serial_buf->length - start;
+ if (slen <= 0) {
+ /*
+ * SPC5r05 says that an all-space serial
+ * number means no product serial number
+ * is available
+ */
+ slen = 0;
+ }
memcpy(path->device->serial_num,
- serial_buf->serial_num,
- serial_buf->length);
- path->device->serial_num_len =
- serial_buf->length;
- path->device->serial_num[serial_buf->length]
- = '\0';
+ &serial_buf->serial_num[start], slen);
+ path->device->serial_num_len = slen;
+ path->device->serial_num[slen] = '\0';
}
} else if (cam_periph_error(done_ccb, 0,
SF_RETRY_UA|SF_NO_PRINT,
OpenPOWER on IntegriCloud