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
This commit is contained in:
parent
3920312eeb
commit
583febf416
10
UPDATING
10
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.
|
||||
|
@ -1559,13 +1559,22 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
|
||||
(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,
|
||||
|
Loading…
Reference in New Issue
Block a user