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
|
disable the most expensive debugging functionality run
|
||||||
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
"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:
|
20160523:
|
||||||
The bitstring(3) API has been updated with new functionality and
|
The bitstring(3) API has been updated with new functionality and
|
||||||
improved performance. But it is binary-incompatible with the old API.
|
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),
|
(u_int8_t *)malloc((serial_buf->length + 1),
|
||||||
M_CAMXPT, M_NOWAIT);
|
M_CAMXPT, M_NOWAIT);
|
||||||
if (path->device->serial_num != NULL) {
|
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,
|
memcpy(path->device->serial_num,
|
||||||
serial_buf->serial_num,
|
&serial_buf->serial_num[start], slen);
|
||||||
serial_buf->length);
|
path->device->serial_num_len = slen;
|
||||||
path->device->serial_num_len =
|
path->device->serial_num[slen] = '\0';
|
||||||
serial_buf->length;
|
|
||||||
path->device->serial_num[serial_buf->length]
|
|
||||||
= '\0';
|
|
||||||
}
|
}
|
||||||
} else if (cam_periph_error(done_ccb, 0,
|
} else if (cam_periph_error(done_ccb, 0,
|
||||||
SF_RETRY_UA|SF_NO_PRINT,
|
SF_RETRY_UA|SF_NO_PRINT,
|
||||||
|
Loading…
Reference in New Issue
Block a user