Author: asomers
Date: Fri May 27 22:26:43 2016
New Revision: 300880
URL: https://svnweb.freebsd.org/changeset/base/300880

Log:
  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

Modified:
  head/UPDATING
  head/sys/cam/scsi/scsi_xpt.c

Modified: head/UPDATING
==============================================================================
--- head/UPDATING       Fri May 27 22:16:46 2016        (r300879)
+++ head/UPDATING       Fri May 27 22:26:43 2016        (r300880)
@@ -31,6 +31,16 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
        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.

Modified: head/sys/cam/scsi/scsi_xpt.c
==============================================================================
--- head/sys/cam/scsi/scsi_xpt.c        Fri May 27 22:16:46 2016        
(r300879)
+++ head/sys/cam/scsi/scsi_xpt.c        Fri May 27 22:26:43 2016        
(r300880)
@@ -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,
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to